AngularJS - 将工厂注入指令的链接功能

Posted

技术标签:

【中文标题】AngularJS - 将工厂注入指令的链接功能【英文标题】:AngularJS - Injecting Factory into Directive's link function 【发布时间】:2014-05-08 08:28:28 【问题描述】:

我有一个简单的代码:

define(['app'], function(app)

    app.factory('factoryProvider', function()
        return 
            name: 'my Name'
        
    );

    app.directive('myDiv',['factoryProvider', function(factoryProvider) 
        return 
            restrict: 'E',
            replace: true,
            templateUrl: 'link/to/template.html',
            controller: function($scope) 
            ,
            link: function(scope, routeParams, location) 
                console.log(factoryProvider.name);
            
        ;   
    ])
);

我希望能够在link 函数内访问myFactory,但我不能!我也试过link: function(scope, routeParams, location, factoryProvider),但也没有用。为什么?

【问题讨论】:

【参考方案1】:

它应该已经在链接函数中可用

app.factory('factoryProvider', function()
    return 
        name: 'my Name'
    
);

app.directive('myDiv',['factoryProvider', function(factoryProvider) 
    return 
        restrict: 'E',
        replace: true,
        template: '<p>name</p>',
        controller: function($scope) 
        ,
        link: function(scope) 
            scope.name=factoryProvider.name;
        
    ;
]);

【讨论】:

嗯,它是为我定义的,但是当我返回参数时,它说未定义。但是在控制器内部使用时,完全相同的方法返回参数。 它说找不到未定义的方法或该方法未定义?如果定义了 factoryProvider,它是什么? 否,返回值未定义。当我在链接中记录工厂时,它只显示一个构造函数。当我在控制器中记录它时,它也会显示所有方法。 呃 idk,也许“供应商”把你搞砸了,试着重命名你的工厂 哈哈,没有!我将其更改为 randomNameTest ,但仍然无法正常工作:p

以上是关于AngularJS - 将工厂注入指令的链接功能的主要内容,如果未能解决你的问题,请参考以下文章

AngularJs 学习笔记依赖注入

AngularJs将来自单独文件的多个指令注入一个公共模块

AngularJS TypeScript 指令链接函数

AngularJS1.X学习笔记9-自定义指令(中)

《AngularJS高级程序设计》学习笔记

AngularJS 自定义服务指令