2014-12-02 3 views
2

Я пытаюсь создать простой вид с angualrjs + ngRoute.Angularjs ng-view не работает

Почему это не работает для меня ???

Пожалуйста, может ли кто-нибудь взглянуть на мой Plunker example и объяснить мне, что я делаю неправильно?

мой index.html:

<!DOCTYPE html> 
<html> 
    <head> 
     <title>Angular Route training</title> 
     <meta charset="utf-8" /> 
     <link rel="stylesheet" type="text/css" href="style.css"> 

     <script src="https://code.angularjs.org/1.3.5/angular.js"></script> 
     <script src="https://code.angularjs.org/1.3.5/angular-route.js"></script> 
     <script src="js/app.js"></script>  
    </head> 

    <body> 

     <div class="main_container"> 

      <div class="inner" ng-app="app"> 

        <div class="container" ng-controller="MainController"> 
         <span ng-cloak>{{text}}</span> 
        </div> 

      </div> 



      <div class="inner" ng-app="views"> 

        <h3>Views Menu</h3> 

        <ul> 
         <li><a href="index.html">Back to HOME</a></li> 
         <li><a href="#/developers">Our Developers</a></li> 
         <li><a href="#/designers">Our Designers</a></li> 
        </ul> 

        <div ng-view></div> 

      </div> 

     </div> 

    </body> 

</html> 

это app.js:

var app = angular.module('app', []); 

var views = angular.module('views', ['ngRoute']); 

views.config(function($routeProvider, $locationProvider){ 
    $routeProvider. 
     when('#/developers', {templateUrl: 'views/dev.html', controller: 'DevCtrl'}). 
     when('#/designers',{templateUrl: 'views/design.html',controller: 'DesignCtrl'}). 
     otherwise({ redirectTo: 'index.html' }); 
    $locationProvider.html5Mode(true); 
}); 

app.controller('MainController', function($scope) { 
    $scope.text = "Hello World!!!!"; 
}); 

views.controller('DevCtrl', function($scope) { 
    $scope.developers = [ 
     {"name":"John", "family":"Doe"}, 
     {"name":"Anna", "family":"Smith"}, 
     {"name":"Peter", "family":"Jones"}, 
     {"name":"Alex", "family":"Volkov"}, 
     {"name":"Yaniv", "family":"Smith"}, 
    ] 
}); 

views.controller('DesignCtrl', function($scope) { 
    $scope.designers = [ 
     {"name":"Inna", "family":"Doe"}, 
     {"name":"Anna", "family":"Smith"}, 
     {"name":"Yafit", "family":"Jones"} 
    ] 
}); 

design.html:

<div id="designers" ng-controller="DesignCtrl"> 

    <h3>Designers List</h3> 

    <table> 
     <tr> 
      <th>Name</th> 
      <th>Family</th> 
     </tr> 
     <tr ng-repeat="d in designers"> 
      <td>{{d.name}}</td> 
      <td>{{d.family}}</td> 
     </tr> 
    </table> 

</div> 

и dev.html

<div id="developers" ng-controller="DevCtrl"> 

    <h3>Developers List</h3> 

    <table> 
     <tr> 
      <th>Name</th> 
      <th>Family</th> 
     </tr> 
     <tr ng-repeat="dev in developers"> 
      <td>{{dev.name}}</td> 
      <td>{{dev.family}}</td> 
     </tr> 
    </table> 

</div> 

благодаря

+0

Весь соответствующий код должен быть включен в ваше сообщение, а не связан с ним. Также - «Я схожу с ума» - вряд ли является правильным описанием вашей проблемы. – wvdz

+0

возможно, это ответит на ваш вопрос: http://stackoverflow.com/questions/18571301/angularjs-multiple-ng-app-within-a-page – Claies

ответ

5

Проблема заключается неправильное использование нг-приложения. Только объявляйте ng-app один раз для своего приложения, как правило, в элементе html.

Затем объявите другие модули в качестве зависимостей вашего основного модуля.

Я разместил объявление ng-app в теге html и поместил вашу ng-routing в модуль приложения, избавившись от модуля views.

http://plnkr.co/edit/btL2QMyHxhDLH7cxZ1YV

var app = angular.module('app', ['ngRoute']); 
app.config(function($routeProvider, $locationProvider){ 
    $routeProvider. 
     when('/developers', {templateUrl: 'dev.html', controller: 'DevCtrl'}). 
     when('/designers',{templateUrl: 'design.html',controller: 'DesignCtrl'}). 
     otherwise({ redirectTo: '/index' }); 
    // $locationProvider.html5Mode(true); 
}); 

<html ng-app="app"> 

Вы также можете поместить вид-логику в отдельном модуле, но обычно будет также поместить его в другой файл.

html5mode отключен, поскольку он вызвал ошибку (немного сложно сделать эту работу).

Примечание: на самом деле можно использовать несколько ng-приложений, вручную загружая их, но вы действительно не должны этого делать, если у вас нет веских оснований для этого.

+0

это не помогает вот ссылка [http: //plnkr.co/edit/6evwfxIk0XObaQzQKxcS?p=preview) – vol4ikman

+0

Да, конечно. Прежде всего я попробовал это на локальной машине – vol4ikman

+0

@ vol4ikman Это работает на плункер.Я отредактировал свой ответ со ссылкой на фиксированный код. – wvdz

0

Я думаю, что есть проблема, как вы объявить зависимость в файле app.js, а также консоль жалуется $locationProvider.html5Mode(true);

Если вы хотите объявить отдельное приложение, которое вы должны сделать что-то вроде этого

var app = angular.module('app', []); 

var views = angular.module('views', []); 

var mainApp = angular.module('mainApp', ['ngRoute','app','views']); 

mainApp.config(function($routeProvider, $locationProvider){ 
    $routeProvider. 
     when('/developers', {templateUrl: 'dev.html', controller: 'DevCtrl'}). 
     when('/designers',{templateUrl: 'design.html',controller: 'DesignCtrl'}). 
     otherwise({ redirectTo: 'index.html' }); 
    //$locationProvider.html5Mode(true); 
}); 

И вот полный рабочий плунжер http://plnkr.co/edit/LvPhShkkgTFQsFJ44Ggo?p=preview

+0

спасибо за примеры и объяснения. Версия для вас сложнее и красивее. благодаря – vol4ikman

Смежные вопросы