2013-12-12 82 views
0

我試圖創建一個模態模塊,可以從應用程序的任何地方調用,但我遇到了一個問題,可能突出了我的一部分誤解,但我可以'看看它是什麼。可以更新工廠從控制器,但不是從指令

繼承人的我想要達到的jsfiddle:http://jsfiddle.net/dwSX8/2/

當我更新ModalAPI從控制器一切正常,但是當我做同樣的從指令罷了。

所以我的HTML是:

<div ng-app="app"> 
    <div ng-controller="AppCtrl"> 
     <button ng-click="logout()">Via Controller</button> 
     <button logout>Via Directive</button> 
    </div> 
    <modal></modal> 
</div> 

和我的角JS的東西:

angular.module('Modal', []) 
.factory('ModalAPI', function() { 

    return { 
     title: 'Before click',    
     open: function(title){ 
      console.log('new title: ' + title); 
      this.title = title; 
     } 
    } 
}) 

.directive('modal', function(){ 

    return { 
     restrict: 'E', 
     scope: {}, 
     replace:true, 
     controller: function($scope, ModalAPI){ 

      $scope.m = ModalAPI; 

      $scope.$watch('modal.title', toggle); 

      function toggle() { 
       console.log(' ---------- Modal changed!!!!'); 
      }; 
     }, 
     template: '<div>{{m.title}}</div>' 
    }; 
}) 

angular.module('app', ['Modal']) 
.controller('AppCtrl', function ($scope, ModalAPI) { 
    $scope.logout = function(){ 
     console.log('clicked'); 
     ModalAPI.open('After controller click') 
    } 
}) 
.directive('logout', function(){ 
    return{ 
     restrict: 'E', 
     link: function($scope, element, ModalAPI) { 
      element.bind('click', function(){ 
       ModalAPI.open('After directive click') 
      }) 
     } 
    } 
}) 

回答

1

綁定事件是角的範圍之外。 Angular不知道事件已被解僱

因此,你必須來包裝你在$電話應用功能:

$scope.$apply(function(){ 
    element.bind('click', function(){ 
    ModalAPI.open('After directive click') 
    }) 
}); 

延伸閱讀:$scope

+0

謝謝,結合埃迪克答案我已經得到它的工作。 – steveg

2

你應該注入你的服務,你宣佈你的指令,而不是在鏈接功能。鏈接函數中的第三個參數是元素的屬性。

.directive('logout', function(ModalAPI){ 
    return{ 
     restrict: 'E', 
     link: function($scope, element) { 
      element.bind('click', function(){ 
       ModalAPI.open('After directive click') 
      }) 
     } 
    } 
}) 
+0

你們都是對的,再加上我也將註銷限制爲'E'而不是'A',所以三重錯誤!我首先接受了Sprottenwels,但你的回答同樣有幫助。謝謝! – steveg

相關問題