我有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。下面是它是如何管理路由的: