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



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

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

我如何告诉angular一个新的控制器已经被添加,它应该解析view1.html只有在应用控制器之后。

查看

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的新手,我试过这个,这个(如何应用文件)和这个(放弃使用$controllerProvider)这个(也没有成功)和这个(不能使整个事情一起工作)我甚至不确定这些描述了我的需求。

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

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

您可以查看现有的延迟加载解决方案,例如ocLazyLoad。下面是它是如何管理路由的:

最新更新