无法在指令链接函数

时间:2016-01-12 15:51:23

标签: javascript angularjs

我试图将工厂添加到现有指令中。目前该功能仍在制定中,我仍然相当新,有角度但强大的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();
        };
      }
    };
  }]);

1 个答案:

答案 0 :(得分: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");
        ...
    
  • 确保所有角度文件都按正确的顺序导入index.html(主要是先用app实例化导入文件)

    <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。您将看到来自工厂的测试方法已执行,这意味着可以访问服务。