2014-12-02 49 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 2014-12-02 21:43:57

+0

也许这将回答你的问题:http://stackoverflow.com/questions/18571301/angularjs-multiple-ng-app-within-a-page – Claies 2014-12-02 21:52:13

回答

5

的问题是NG-应用程序的不正确使用。只需为应用程序声明一次ng-app,通常在html元素上。

然后声明其他模块为主模块的依赖关系。

我把ng-app声明放在html标签上,并把你的ng-routing放在app模块中,摆脱了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-app,但是除非你有很好的理由,否则你不应该这么做。

+0

它并没有帮助 这里是[链接](http: //plnkr.co/edit/6evwfxIk0XObaQzQKxcS?p=preview) – vol4ikman 2014-12-02 21:55:18

+0

当然可以。之前我在本地机器上尝试过它 – vol4ikman 2014-12-02 22:03:54

+0

@ vol4ikman它确实能在plunker上工作。我编辑了一个链接到固定代码的答案。 – wvdz 2014-12-02 22:13:40

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); 
}); 

这里是全部工作plunker http://plnkr.co/edit/LvPhShkkgTFQsFJ44Ggo?p=preview

+0

谢谢你的例子和解释。你的版本对我来说更复杂也更漂亮。谢谢 – vol4ikman 2014-12-02 23:00:49