Використання вбудованих шаблонів у AngularJS


82

Я хотів завантажити шаблон вбудованого подання.

Я загорнув шаблон у тег сценарію типу text/ng-templateта встановив ідентифікатор 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>

Відповіді:


111

Оді, ти був на правильному шляху, проблема була лише в тому, що теги знаходяться поза елементом DOM, для якого використовується ng-appдиректива. Якщо ви перемістите його в <body ng-app="LearningApp">елемент, рядкові шаблони повинні працювати.

Ви також можете знайти це питання актуальним: чи є спосіб зробити часткові завантаження AngularJS спочатку, а не при необхідності?


2
Тепер я бачу, чому більшість підручників воліють додавати директиву ng-app до елемента html. Це тому, що все, що пов’язане з цим додатком / модулем, повинно знаходитися в межах ng-app, отже, якщо помістити його в тег html, можна уникнути таких майбутніх проблем
Оді,

3
Про це має згадати документація. Я
губляв

32

Спробуйте використати атрибут id елемента сценарію-елемента, щоб встановити назву шаблону, який повинен працювати.

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

Я це зробив. Не працював. Я підозрюю той факт, що моя головна сторінка насправді не є типовим файлом html. як на сервері / контролері
Оді

чому ви не використовуєте файли шаблонів, це більш зрозуміло на мій погляд.
tchiela

Так, ти маєш рацію. Цей метод працює добре, працює ефективніше і все. Але у мене є програми, які я хочу перенести, написані у старих фреймворках, таких як магістраль, і вони значною мірою покладаються на вбудовані шаблони. Ось чому я хотів знати, як це робиться у кутах.
Оді,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.