我应该如何在 Angular ui-router 中创建 templateUrl 属性的路径?

Posted

技术标签:

【中文标题】我应该如何在 Angular ui-router 中创建 templateUrl 属性的路径?【英文标题】:how should I create the path of templateUrl property in Angular ui-router? 【发布时间】:2015-01-22 08:00:32 【问题描述】:

请帮忙!

我试图弄清楚为什么 chrome 控制台返回我找不到我的“home.html”模板GET http://localhost:3000/home.html 404 (Not Found)。 恐怕我没有设置正确的“templateUrl”属性的路径。

这是我的文件夹结构:

app.js
bin/
node_modules/
package.json
public/
---------javascript/
-------------------angularApp.js
routes/
views/
----------index.ejs
----------home.html

这是我的配置代码(位于 angularApp.js 中)

angular.module('supervisor', ['ui.router'])
.config([
    '$stateProvider',
    '$urlRouterProvider',
    function ($stateProvider, $urlRouterProvider) 
        $stateProvider
            .state('home', 
                url: '/home',
                templateUrl: '/home".html',
                controller: 'MainCtrl'
            );

        $urlRouterProvider.otherwise('/home');
    
])

我也尝试了不同的路径,例如“../../home.html”,但没有成功。如果我使用内联模板,它就可以工作(<script type="text/ng-template" id="/home.html">Hello!</script>)。

谢谢!

【问题讨论】:

【参考方案1】:

您似乎正在使用 express 来为您的应用程序提供服务。 Express 是一个服务器端框架,而 Angular 是一个客户端框架。您不应该混合使用 2 个代码库。您在 Angular 中使用的所有内容都应作为静态资源。您很可能将公用文件夹作为静态路由提供服务。所以很可能你需要像这样修改你的结构(我将如何构建它):

public
--app
----scripts
------angularApp.js
----views
------home.html

那么你的模板网址应该是'/app/views/home.html'

【讨论】:

嗨@Vadim,谢谢你的回答,你打破了我6小时的连续调试。我按照流行的thinkster.io/angulartutorial/mean-stack-tutorial 课程的说明进行操作,结果我掉进了坑里。他们只提供内联模板作为实例,这对于像我这样的初学者来说可能是戏剧性的,当他尝试使用分离的模板文件而不是内联模板时,因为结构似乎不同。再次感谢你,你救了我:)【参考方案2】:

MVC 默认保护视图文件夹。

在使用角度路由时将 HTMLHandler 行添加到 views\web.config 并且您希望模板位于视图文件夹中:

 <system.webServer>
    <handlers>
      <remove name="BlockViewHandler"/>
      <add name="HTMLHandler" path="*.html" verb="*" preCondition="integratedMode" type="System.Web.StaticFileHandler" />
      <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
    </handlers>
  </system.webServer>

有关 ViewHandlers 的更多信息,另请参阅link。

【讨论】:

以上是关于我应该如何在 Angular ui-router 中创建 templateUrl 属性的路径?的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2、TypeScript 和 ui-router - 如何获取状态参数

Angular ui-router 每个state的过滤器应该怎么添加

Angular - ui-router 获取先前的状态

Angular 没有使用 ui-router 响应任何路由 - 当我输入时 URL 就会消失

angular ui-router:在解析中获取 toState 的 $state 信息

Angular ui-router 中 $state.transitionTo() 和 $state.go() 之间的区别