原始代码如下:

(function() {
    angular.module('test', ['ngRoute'])
        .config(function($routeProvider) {
            $routeProvider
                .when('/test', {
                    templateUrl: '/templates/test.html',
                    controller: 'testCtrl'
                })
                .when('/test2', {
                    templateUrl: '/templates/test2.html',
                    controller: 'test2Ctrl'
                })
                .otherwise({
                    redirectTo: '/test'
                });
        });
})();

//ANOTHER FILE
(function() {
    angular.module('test')
        .controller('testCtrl', function($scope) {
            $scope.name = "test";
        })
        .controller('test2Ctrl', function($scope) {
            $scope.name = "test2";
        });
});


没有错误,但是模板中显示的全部是{{name}}而不是作用域中定义的内容。

然后,我尝试将控制器移动到另一个模块中,并将依赖项注入其中。有趣的是,即使将控制器移动到单独的模块中,它也无法正常工作:

(function () {
    angular.module('test2', []);
    angular.module('test', ['ngRoute', 'test2']);
})();

//ANOTHER FILE
(function() {
    angular.module('test')
        .config(function($routeProvider) {
            $routeProvider
                .when('/test', {
                    templateUrl: '/templates/test.html',
                    controller: 'testCtrl'
                })
                .when('/test2', {
                    templateUrl: '/templates/test2.html',
                    controller: 'test2Ctrl'
                })
                .otherwise({
                    redirectTo: '/test'
                });
        });
})();

//ANOTHER FILE
(function() {
    angular.module('test2')
        .controller('testCtrl', function($scope) {
            $scope.name = "test";
        })
        .controller('test2Ctrl', function($scope) {
            $scope.name = "test2";
        });
});


实际上,在此过程中引发了一个错误,即找不到控制器。

据我了解,之所以发生这种情况是因为由于config块的运行方式以及在注册控制器之前如何运行的性质。

我解决此问题的一种方法是,将控制器和模板移到指令中,然后将指令本身用作模板。

(function() {
    angular.module('test')
        .config(function($routeProvider) {
            $routeProvider
                $routeProvider
                .when('/', {
                    template: '<test></test>'
                })
                .when('/test2', {
                    template: '<test2></test2>'
                })
                .when('/test3', {
                    template: '<test3></test3>'
                })
                .otherwise({
                    redirectTo: '/'
                });
        });
})();


我想知道当您的控制器位于单独的文件中时,是否还有其他人可以支持将控制器放入路由器中。

最佳答案

您在控制器文件上缺少()自执行功能(IIFE)。

//ANOTHER FILE
(function() {
    angular.module('test2')
        .controller('testCtrl', function($scope) {
            $scope.name = "test";
        })
        .controller('test2Ctrl', function($scope) {
            $scope.name = "test2";
        });
})(); //<-- added here

关于javascript - 在$ routeProvider路由中定义位于单独文件中的 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30669795/

10-09 13:51