如何判断已添加控制器的角度? (从单独的文件加载)

时间:2015-10-06 21:59:41

标签: angularjs angularjs-ng-route

我有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

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'}
    ];
});

我是棱角分明的新手我试过thisthis(如何申请文件)  和this(放弃申请$controllerProvider)  this(也没有成功)和this(无法使整个事情一起工作)我甚至不确定那些描述了我的需求。请给我一个线索,我应该深入了解哪些帖子。

1 个答案:

答案 0 :(得分:1)

如果没有使用$controller干掉它并捕获异常,你就无法检查控制器是否存在,这是一件非常糟糕的事情。

即便如此,您也很难注册新的控制器,因为在配置阶段app.controller无法使用之后,$controllerProvider.register仅在配置块中可用。

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