我有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');
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'}
];
});
我是棱角分明的新手我试过this,this(如何申请文件)
和this(放弃申请$controllerProvider
)
this(也没有成功)和this(无法使整个事情一起工作)我甚至不确定那些描述了我的需求。请给我一个线索,我应该深入了解哪些帖子。
答案 0 :(得分:1)
如果没有使用$controller
干掉它并捕获异常,你就无法检查控制器是否存在,这是一件非常糟糕的事情。
即便如此,您也很难注册新的控制器,因为在配置阶段app.controller
无法使用之后,$controllerProvider.register
仅在配置块中可用。
您可以查看延迟加载的现有解决方案,即ocLazyLoad。 Here is它如何管理路线。