2016-01-12 26 views
0

我试图工厂添加到现有的指令内。目前这个功能还在制定中,而且我对JS的角度还是比较新的,但还是很强大。从一般的JS范围来看,一切似乎都应该没问题。但是,设备和remoteTerminalFactory在进入链接功能时不存在。我在返回之前添加了一个变量,这也不再存在。它必须是某种范围问题,但我不明白是什么导致了这个问题。不能访问注射服务向链路功能

'use strict'; 

angular.module('App') 
    .directive('modalRemoteTerminal', ['equipment', 'remoteTerminalFactory',  function (equipment, remoteTerminalFactory) { 
    var test = true; 
    // equipment & remoteTerminalFactory exist as expected 
    return { 
     templateUrl: 'app/equipment-detail/health-tab/modal-remote-terminal/remote-terminal.html', 
     restrict: 'E', 
     link: function (scope, element, attrs) { 
     // test, equipment & remoteTerminalFactory are undefined 
     scope.modalCtrlRemoteTerminal = {}; 
     scope.remoteTerminal = function(){ 
     scope.modalCtrlRemoteTerminal.openModal(); 
     }; 
     } 
    }; 
    }]); 
+0

'设备'和'remoteTerminalFactory'应该在你的链接函数中定义。你可以显示不工作的代码吗? – rob

+0

我目前没有任何代码,因为我无法访问我注入的工厂。据我所知,你没有在链接函数中定义它,因为它已经在指令中完成了。我不应该有权访问链接函数内部注释中提到的那三个变量吗? –

+0

是的,您将有权访问链接功能中的这三个变量。尝试在plunkr中重现您的问题 – rob

回答

1

有几个基本的东西,必须实现以访问角厂。

请参阅本Plunker,我已经把你的指令角内部应用程序,并建立模拟工厂。

以下是要点:

  • 实例化服务(在本例中模拟工厂)

    angular.module('App').factory('equipment', function() { 
        return { 
         tellSomething: function(text){ 
         console.log(text) 
         } 
        }; 
    }); 
    ... 
    
  • 中注入服务指令(该部分看起来您的代码段细),尝试使用服务方法以测试

    link: function (scope, element, attrs) { 
        //showing the access to injected factories/services 
        equipment.tellSomething("I'm equipment factory"); 
        remoteTerminalFactory.tellSomething("I'm remoteTerminalFactory factory"); 
        ... 
    
  • make s URE所有角文件导入到正确的顺序index.html(最主要的是要导入的文件与应用程序实例第一)

    <script src="script.js"></script> 
    <script src="service.js"></script> 
    <script src="directive.js"></script> 
    
  • 使用自定义指令在index.html

    <body ng-app="App"> 
        <h2>Angular app</h2> 
        <hr> 
        <modal-remote-terminal></modal-remote-terminal> 
    </body> 
    

Plunker更多细节。你会看到来自工厂的测试方法被执行,这意味着服务是可访问的。