如何告诉 angular 已经添加了控制器? (从单独的文件加载)
How to tell angular that a controller has been added? (loaded from a separate file)
我有 index.html
个主文件和部分 view1.html
,我使用 ng-route
。所以我希望控制器 view1.js
仅在访问 view1.html
时加载。所以我使用 resolve
指令成功加载了文件。由于 javascript 在后台加载 angular 开始解析 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 我试过 this, this(如何应用文件)
和 this(放弃申请 $controllerProvider
)
(didn't succeed either) and this(无法让整个事情一起工作)我什至不确定那些描述了我的需求。请给我一个线索 post 我应该深入研究什么。
如果不使用 $controller
干燥 运行 并捕获异常,则无法检查控制器是否存在,这是一件很糟糕的事情。
即使那样你也很难注册一个新的控制器,因为在配置阶段后 app.controller
不能使用,并且 $controllerProvider.register
只能在配置块中使用。
您可以查看现有的延迟加载解决方案,即ocLazyLoad. Here is它如何管理路由。
我有 index.html
个主文件和部分 view1.html
,我使用 ng-route
。所以我希望控制器 view1.js
仅在访问 view1.html
时加载。所以我使用 resolve
指令成功加载了文件。由于 javascript 在后台加载 angular 开始解析 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 我试过 this, this(如何应用文件)
和 this(放弃申请 $controllerProvider
)
如果不使用 $controller
干燥 运行 并捕获异常,则无法检查控制器是否存在,这是一件很糟糕的事情。
即使那样你也很难注册一个新的控制器,因为在配置阶段后 app.controller
不能使用,并且 $controllerProvider.register
只能在配置块中使用。
您可以查看现有的延迟加载解决方案,即ocLazyLoad. Here is它如何管理路由。