javascript - AngularJS 依赖注入(inject)计时问题

标签 javascript angularjs

我有与 AngularJS 依赖注入(inject)和它们之间的时间相关的问题。这是我的代码和错误

var module = angular.module('Demo', []);

module.factory('demo', function () {
        return {
            data: {},
        };
    });

module.provider('foo', ['demo', function(demo) {
    console.log(demo);

    this.$get = function() {
    };
}]);

错误:

Uncaught Error: [$injector:modulerr] Failed to instantiate module Demo due to:
Error: [$injector:unpr] Unknown provider: demo

但是如果我在最后一个定义中添加 setTimeout ,一切都会正常,但它的黑客代码不应该是这样的。

var module = angular.module('Demo', []);

module.factory('demo', function () {
        return {
            data: {},
        };
    });
setTimeout(function(){
module.provider('foo', ['demo', function(demo) {
    console.log(demo);

    this.$get = function() {
    };
}]);

});

这是 fiddle 的问题: http://jsfiddle.net/zcf7rb4s/1/

最佳答案

您无法将 demo 添加为依赖项,因为它尚不存在。这就是 $injector 的工作方式。您可以做的是将 demo 列为提供程序的 $get 函数中的依赖项。这将在定义所有提供者之后由 $injector 执行。

检查this :

<div ng-app="Demo">
    <div ng-controller="test">{{x}}</div>
</div>

定义:

var module = angular.module('Demo', []);

module.factory('demo', function () {
        return {
            data: {x: 'x'},
        };
    });

module.provider('foo', function() {
    this.$get = function(demo) {
        return {
            demo: demo
        };
    };
});

module.controller('test', ['$scope', 'foo', function($scope, foo) {
    $scope.x = foo.demo.data.x;
}]);

工厂和提供者内部的代码在“步骤 1”运行。 然后,在“步骤 2”中,AngularJS 绑定(bind) Controller 。它首先使用 $injector 注入(inject)依赖项(之前已在“步骤 1”中定义)。因此,在实践中,您的 $timeout “模拟”这种行为,这就是它起作用的原因。但这是错误的,这不是你应该使用它们的方式。

关于javascript - AngularJS 依赖注入(inject)计时问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29412740/

相关文章:

javascript - 在工厂函数中包含的原型(prototype)对象字面量中使用闭包与 this

javascript - 动态创建的 Bootstrap 按钮丢失空间填充

javascript - 如何使用 jQuery 选择文本

javascript - 附加文件停止工作 octobercms 电子邮件 ajax 表单

javascript - react 虚拟网格排序图标

javascript - 在 headless 服务器上运行时如何运行 angular-phonecat 教程测试

html - 使用 Angular js 在 contenteditable div 上自动检测文本

angularjs - ValueChanges 和 SnapshotChanges,不再使用 Firebase AngularFire2 获取完整列表

javascript - 如何使用 AngularJS 在应用程序的生命周期内存储 'Token' ?

angularjs - 防止 AngularJS 在每个 $digest 周期脏检查数千行