在AngularJS中使用内联模板


82

我想加载一个内联视图模板。

我将模板包装在类型为的脚本标签中text/ng-template,并将ID设置为temp1.html。这是我的模块配置

learningApp.config(function ($routeProvider) {
    $routeProvider
        .when("/first",{ controller: "SimpleController", templateUrl: "temp1.html"})
        .when("/second", {controller: "SimpleController", templateUrl: "temp2.html"})
        .otherwise({redirectTo : "/first"});
});

GET http://localhost:41685/temp1.html 404 (Not Found)在控制台窗口中告诉我,这意味着它正在寻找该名称的文件。

我的问题是:如何配置路由以使用嵌入式模板?

更新:这是我的服务器呈现的DOM的样子

<!DOCTYPE html>
<html>
<head>
    <script src="/Scripts/angular.js"></script>
    <link href="/Content/bootstrap.css" rel="stylesheet"/>
</head>
<body>
    <div class="container">       
    <h2>Getting Started with Angular</h2>
    <div class="row">
        <div class="panel" ng-app="LearningApp">
            <div ng-view></div>
        </div>
    </div>

<script type="text/ng-template" id="temp1.html">
    <div class="view">
        <h2>First View</h2>
        <p>
            Search:<input type="text" ng-model="filterText" />
        </p>
        <ul class="nav nav-pills">
            <li ng-repeat="cust in customers | orderBy:'name' | filter: filterText "><a href="#">{{cust.name}} - {{cust.school}}</a></li>
        </ul>
    </div>
</script>

<script type="text/ng-template" id="temp2.html">
    <div class="view">
        <h2>Second View</h2>
        <p>
           Search:<input type="text" ng-model="filterText" />
        </p>
        <ul class="nav nav-pills">
            <li ng-repeat="cust in customers | orderBy:'name' | filter: filterText "><a href= "#">{{cust.name}} - {{cust.school}}</a></li>
        </ul>
    </div>
</script>
    </div>
    <script src="/Scripts/jquery-1.9.1.js"></script>
    <script src="/Scripts/bootstrap.js"></script>
    <script src="/Scripts/app/LearningApp.js"></script>
 </body>
</html>

Answers:


111

Ody,您的方向正确,唯一的问题是标记位于使用指令的DOM元素之外ng-app。如果将其移动到<body ng-app="LearningApp">元素,则内联模板应该可以使用。

您可能还会发现与此问题相关的问题:是否有办法使AngularJS在开始时而不是在需要时加载局部变量?


2
现在,我明白了为什么大多数教程都倾向于将ng-app指令添加到html元素中。这是因为与该应用程序/模块相关的所有内容都必须在ng-app范围内,因此将其放入html标记可避免此类将来的问题
Ody 2013年

3
这是文档必须提及的内容。我
浪费

32

尝试使用script-Element的id-Attribute设置应该起作用的模板的名称。

<script type="text/ng-template" id="temp1.html">
   ... some template stuff
</script>

我做到了 没用 我怀疑我的主页实际上不是典型的html文件。如在服务器/控制器中
Ody 2013年

为什么不使用模板文件,在我的看法中更清楚。
tschiela

是啊,你说得对。该方法效果很好,执行效果更好。但是我有要迁移的应用程序,这些应用程序是在较旧的框架(如主干)中编写的,它们严重依赖于内联模板。这就是为什么我想知道它是如何成角度地完成的。
Ody
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.