angularjs - AngularJS 中 app.register.controller 和 app.controller 的区别

标签 angularjs

我不知道什么时候在创建模块后使用 app.register.controller 和 app.controller 创建 Controller 。我用谷歌搜索,但没有发现两种情况之间有明显区别。请张贴示例。

最佳答案

简单回答

您可以使用 app.controller 在应用程序运行之前注册提供者(即,在 Bootstrap 或 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']);
});

此时,angularjs 会加载所有在引导阶段之前注册的提供者。但是,如果您再次尝试注册一个 Controller ,它不会加载到您的应用程序中,因为 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
    };
});

查看此答案以获取更多信息:https://stackoverflow.com/a/20922872/4488121

最后,现在它允许您在应用程序启动后(即在运行时)注册提供者。

app.register.controller('myController2', function (){});

关于angularjs - AngularJS 中 app.register.controller 和 app.controller 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40790545/

相关文章:

javascript - AngularJS 禁用键的方法

javascript - 通过 $index 或 indexOf() 删除项目会导致删除 ng-repeat 中的所有项目

javascript - AngularJS ng-click 不适用于动态附加的剑道面板栏

angularjs - angular-ui-router 嵌套状态不适用于多个 View

python - 如何忽略发送到 Django REST Framework 的 CSRF token ?

javascript - 众所周知,单例是不好的做法, Angular 是基于单例的。 Angular 不好吗?

angularjs - Angular JS触摸和滑动

css - AngularJS 中的粘性 Bootstrap 页脚

angularjs - Angular 1.3、必需、form.$invalid 和保存的密码

javascript - 如何使用 angularjs 自定义排序这些数据?