0

的呼叫控制器方法我有一個按鈕可以改變「活動」狀態。首先,它加載從服務器狀態來自指令

<button active="data.active" ng-click="changeStatus()"></button> 

指令代碼:

app.directive('active', function() { 
    return { 
    restrict: 'A', 
    templateUrl: 'whatever.html', 
    scope: { 
     active: '=' 
    }, 
    link: function($scope, elem, attrs) { 
     $scope.changeStatus = function() { 
      // Actually I'm doing this, it works fine 
      var value = !$scope.active; 

      $scope.$parent.MethodWhoChangesState(value, function(response) { 
       // I need to change the button state here 
      }); 
     } 
    } 
    } 
}) 

它的工作原理,但我覺得我不尊重「角的規則」 ......

有沒有更好的方法?

+0

您應該通過屬性傳給你的函數,並用它綁定到範圍'&' – jcubic

+0

總是好的評估如果你真的需要一個孤立的範圍。如果沒有,你的指示將已經在父範圍 – charlietfl

+0

@charlietfl如果他不創建新的範圍與attr biding,那麼他將需要自己雙倍綁定。 – jcubic

回答

0

通常情況下,您只需在您的點擊處理程序中更新$ scope變量。如果你需要處理的情況下,當「有效」狀態的改變,你可以設置$表:

app.directive('active', function() { 
    return { 
    restrict: 'A', 
    templateUrl: 'whatever.html', 
    scope: { 
     active: '=' 
    }, 
    link: function($scope, elem, attrs) { 

     // if you need to run custom code whenever the 'active' state changes 
     // you can set up a $watch 
     $scope.$watch('active', function(isActive) { 
       if(isActive) { 
        ... 
       } 
       else { 
        ... 
       } 
     }); 

     $scope.changeStatus = function() { 

      $scope.active = !$scope.active; 
     } 
    } 
    } 
}) 
+0

我需要調用$ parent作用域的函數,另外,如果我把這個調用放在$ watch中,我認爲它會在第一次渲染指令時執行。 – Ulrira