簡體   English   中英

在具有不同控制器的視圖內使用ng-click和指令函數

[英]using ng-click with a directive function inside a view with a different controller

我有這個HTML:

<button ng-click="reset()">
<div ng-controller="anotherController" class="container">
  <directive data="{{ datafordirective }}"></directive>
</div>

指示:

app.directive('directive', function(){
   return {
    restrict: 'AE',
    scope:{ data: '=', someAction: '=', reset: '='},
    link: function(scope, element, attrs){
     scope.reset = function(){
        //reset dataset
     };  
  }
};

});

我的指令內部有一個鏈接函數來重置數據,但問題是使用此按鈕和此指令的即時消息具有不同的控制器,但該指令和此視圖控制器都屬於同一app.module(' appname',[])...

有沒有辦法做到這一點? 在指令范圍之外使用scope.reset()函數?

謝謝!

您可以通過多種方法來執行此操作。 我將舉幾個例子:

1.簡單(非理想)方式

在指令中訪問父作用域:

代替:

scope.reset = function() {};

采用:

scope.$parent.reset = function() {};  

但是從子范圍內修改父范圍不是一個好習慣。 它可能導致范圍繼承的工作方式混亂( AngularJS中范圍原型/原型繼承的細微差別是什么? )。 另外,IMO,這不是很好的封裝。

2.一種(略)更好的方法

<button ng-click="buttonClicked = true">
<div ng-controller="anotherController" class="container">
  <directive data="{{ datafordirective }}" reset="buttonClicked" reset-callback="buttonClicked = false"></directive>
</div>

在這里,我們使用父作用域中的屬性( buttonClicked )通過元素上的屬性控制指令。

app.directive('directive', function(){
   return {
    restrict: 'AE',
    scope:{ data: '=', resetCallback: '&', reset: '='},
    link: function(scope, element, attrs){
     scope.$watch('reset', function(val) {
       if (val) {
         // reset dataset
         scope.resetCallback();
       }

     });
  }
};

該指令將buttonClicked的值綁定到reset ,然后buttonClicked該值是否更改,並在設置時重置該數據集。

3.另一個更好的方法

創建一個服務來處理數據集上的操作。

app.service('dataset', function() {
  this.reset = function() {
    // reset dataset
  };
});

然后,在父控制器的某處,您需要注入dataset服務並創建一個函數來調用dataset.reset

$scope.reset = function() {
  dataset.reset();
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM