如何告诉 angular 已经添加了控制器? (从单独的文件加载)

How to tell angular that a controller has been added? (loaded from a separate file)

我有 index.html 个主文件和部分 view1.html,我使用 ng-route。所以我希望控制器 view1.js 仅在访问 view1.html 时加载。所以我使用 resolve 指令成功加载了文件。由于 javascript 在后台加载 angular 开始解析 view1.html 我得到:

[ng:areq] Argument 'SimpleController2' is not a function, got undefined

如何告诉 angular 添加了一个新的控制器,它应该只在应用控制器后解析 view1.html

Check this out

main.js

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

  demoApp.config(function ($routeProvider) {
    $routeProvider
        .when('/view1', {
            controller: 'SimpleController1',
            templateUrl: 'View1.html',
            resolve: {
                lol : function get() {
                    console.log('file is being loaded');
                    var fileRef = document.createElement('script');
                    fileRef.setAttribute("type", "text/javascript");
                    fileRef.setAttribute("src", "view1.js");
                    document.getElementsByTagName("head")[0].appendChild(fileRef);
                    fileRef.onload = function () {
                        console.log('file loaded');
                    }

                }
            }
        })
        .when('/view2',
        {
            controller: 'SimpleController',
            templateUrl: 'View2.html'
        })
        .otherwise({redirectTo: '/view1'});
});

console.log('config has been added');

controller.js

console.log("file parsed");
demoApp.filter('myFilter', function ($sce) {

    return function (input, isRaw) {
        input = input.replace(/a/g, 'b');
        return $sce.trustAsHtml(input);
    };

});

demoApp.controller("SimpleController1", function ($scope, simpleFactory) {
    $scope.names = [

        {name: 'Nick', city: 'London'},
        {name: 'Sick', city: 'Tokio'},
        {name: 'Brick', city: 'cellar'}
    ];
});

我是新手 angular 我试过 this, this(如何应用文件) 和 this(放弃申请 $controllerProvider (didn't succeed either) and this(无法让整个事情一起工作)我什至不确定那些描述了我的需求。请给我一个线索 post 我应该深入研究什么。

如果不使用 $controller 干燥 运行 并捕获异常,则无法检查控制器是否存在,这是一件很糟糕的事情。

即使那样你也很难注册一个新的控制器,因为在配置阶段后 app.controller 不能使用,并且 $controllerProvider.register 只能在配置块中使用。

您可以查看现有的延迟加载解决方案,即ocLazyLoad. Here is它如何管理路由。