【问题标题】:Different controllers in different files for ng-viewng-view 的不同文件中的不同控制器
【发布时间】:2015-01-14 20:31:53
【问题描述】:

我正在为不同的视图使用两个控制器(在不同的 js 文件中)。

我的主要 HTML

================================================ ===================================

<html ng-app="MyApp">

<head>

    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
    <script type="text/javascript" src="/JS/utilityJS/angular.min.js"></script>
    <script type="text/javascript" src="/JS/utilityJS/angular-route.js"></script>
     <script type="text/javascript" src="/JS/app.js"></script>
     <script type="text/javascript" src="/JS/controllerLocation.js"></script>
     <script type="text/javascript" src="/JS/controllerItem.js"></script>
</head>

<body>
    <div id="populateDiv" >
         <div id="header"   ng-include src="'/pages/header.html'"></div> 
        <div id="footer" ng-include src="'/pages/footer.html'"></div>
        <div id="groceryBg" class=" mainContentBg" style=""> </div>
        <div ng-view=""></div>
</div>
</body>
</html>

App.js // 主js文件

 angular.module('controllersModule', []);
    var AppModule = angular.module('MyApp', ['ngRoute','controllersModule']);

    AppModule 
    .service('locationService', function ($http) {
    ......  
    }

    AppModule .config(['$routeProvider',
      function($routeProvider) {


        $routeProvider.
          when('/Load/', {
            templateUrl: 'location.html',
            controller: 'locationCtrl'
          }).
          when('/Items/', {
            templateUrl: 'items.html',
            controller: 'itemsCtrl'
          }).
          otherwise({
            redirectTo: '/Load/'
          });
      }]);

controllerLocation.js // 位置控制器

 angular.module('controllersModule').controller('locationCtrl', ['$rootScope', '$scope','$route', '$http','$location','locationService', '$routeParams',
        function($rootScope, $scope, $route,$http,$location,locationService, $routeParams)
        {

    $location.path("/Items");
    }

controllerItem.js // 项目控制器

 angular.module('controllersModule').controller('itemsCtrl' ['$rootScope', '$scope', '$route', '$http', 'locationService', '$routeParams',
        function($rootScope, $scope, $route, $http, locationService, $routeParams)
        {


            console.log("Scope id Items is:- " + $scope.$id);

    }

location.html // 位置 html

 <html>
    <head>

    </head>
    <body>

     <div> 
    Location.....
    </div>
    </body>
    </html>

items.html

 <html>
    <head>

    </head>
    <body>

     <div> 
    Items.....
    </div>
    </body>
    </html>

================================================ ===================================

当我调用 /Load 并调试它时,它会显示 location.html 内容并加载 controllerLocation。但在 $location.path("/Items"); 之后它正在加载 items.html 但不加载 controllerItem 并抛出 erroenter code herer http://errors.angularjs.org/1.2.22/ng/areq?p0=itemsCtrl&p1=not%20aNaNunction%2C%20got%20undefined

你能帮忙找出问题所在吗?

【问题讨论】:

    标签: angularjs ng-view


    【解决方案1】:

    您在 itemsCtrl 的声明中忘记了逗号和右方括号

    angular.module('controllersModule').controller('itemsCtrl', ['$rootScope', '$scope', '$route', '$http', 'locationService', '$routeParams',
    function($rootScope, $scope, $route, $http, locationService, $routeParams)
    {
        console.log("Scope id Items is:- " + $scope.$id);
    }]);
    

    【讨论】:

    • 非常感谢。它奏效了,这对我来说真的是一个愚蠢的错误。
    • 发布代码时,请尽量减少代码以隔离问题,然后再发布问题。
    • 问题内容冗长,抱歉。是的,将来会这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2015-05-21
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多