0

我有index.html主文件和部分文件view1.html,我使用ng-route. 所以我希望控制器只有在被访问view1.js时才被加载。view1.html所以我使用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');

控制器.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这个(也没有成功)和这个(不能让整个事情一起工作)我不是甚至可以确定那些描述了我的需求。请给我一个线索,我应该深入研究哪个帖子。

4

1 回答 1

1

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

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

您可以查看现有的延迟加载解决方案,即ocLazyLoad这是它管理路线的方式。

于 2015-10-07T00:16:02.937 回答