我不知道在创建模块后什么时候使用 app.register.controller 和 app.controller 来创建控制器。我用谷歌搜索,但我没有发现两种情况之间的明显区别。请发布示例示例。
您可以使用app.controller在应用程序运行之前注册提供程序(即,在引导之前或ng-app,在配置时)。并且app.register.controller用于在应用程序已经启动(即正在运行)时注册新的提供程序。
AngularJs 加载在模块被引导之前注册的所有提供者,一旦你的模块被引导,angular 将不再寻找注册的提供者。这对大多数应用程序来说都很好,但在某些情况下,您必须在运行时(即在应用程序启动后)加载新的提供程序,这称为延迟加载。因此,如果 angular 不再查找已注册的组件,您也必须手动注册它。
例如:
var app = angular.module('myApp', []);
app.controller('myController1', function (){});
angular.element(documento).ready(function () {
// equivalent to ng-app attribute
angular.bootstrap(document, ['myApp']);
});
Run Code Online (Sandbox Code Playgroud)
此时,angularjs 将加载引导阶段之前注册的所有提供程序。但是,如果您再次尝试注册控制器,它不会加载到您的应用程序中,因为 angularjs 只会在引导应用程序时加载它。
因此,要在运行时注册提供者,您必须在模块上公开 angularjs 的提供者和组件工厂,如下所示:
app.config(function($controllerProvider, $compileProvider, $filterProvider, $provide) {
app.register = {
component: $compileProvider.component,
controller: $controllerProvider.register,
directive: $compileProvider.directive,
filter: $filterProvider.register,
factory: $provide.factory,
service: $provide.service
};
});
Run Code Online (Sandbox Code Playgroud)
查看此答案以获取更多信息:https : //stackoverflow.com/a/20922872/4488121
最后,现在它允许您在应用程序引导后(即在运行时)注册提供程序。
app.register.controller('myController2', function (){});
Run Code Online (Sandbox Code Playgroud)