2015-01-13 225 views
0

我有一個叫selectable指令,將一個selected屬性添加到元素,當鍵盤箭頭選擇項目(這是一個網格)。然後我有另一個叫remote-action的指令。訪問其他屬性在屬性角

是否有可能類似remote-action="hasAttribute('selected') ? 'Open' : false"其中hasAttribute是我正在尋找,或獲得另一個屬性值的不同屬性值的方式。

不是每一個selectable將有remote-action反之亦然,所以我不認爲我可以在任何一個指令的代碼中做到這一點,也有一些元素將有孤立的範圍,有些不會。

回答

0

我對此的建議是使用require配置選項和selectable指令中的控制器來公開selected屬性。代碼的輪廓:

app.directive('selectable', function() { 
    return { 
     ... 
     controller: function($scope, $element) { 
      var self = this; 

      this.selected = false; // (1) 

      $element.on('...', function() { 
       $scope.$apply(function() { 
        self.selected = ... // (2) 
       }); 
      }); 
     } 
    }; 
}); 

app.directive('remoteAction', function() { 
    return { 
     ... 
     require: '?selectable', // (3) 
     link: function(scope, elem, attrs, selectableCtrl) { 
      if(selectableCtrl !== null) { // (4) 
       scope.$watch(// (5) 
        function() { 
         return selectableCtrl.selected; 
        }, 
        function(newval, oldval) { 
         ... 
        } 
       ); 
      } 
     } 
    }; 
}); 

說明:

  1. selectable指令具有控制器暴露出selected屬性
  2. selected屬性,都會根據一些邏輯更新 - 在上面的例子中,當DOM事件發生
  3. remoteAction指令可選地要求selectable指令位於同一元素中
  4. 角傳遞null作爲控制器,如果協作指令沒有找到
  5. remoteAction指令手錶selected屬性的值,並採取措施相應
+0

這將使視圖/ HTML沒有官方記錄,雖然,並將捆綁2個無關的指令。如果遠程操作的另一個用法想要使用不同的屬性呢? –

+0

單個元素上的指令共享他們的'$ attrs'。你可以使用這個,即一個人看着attrs,另一個爲它設置值。我仍然認爲它與合作指令相比更加清潔,或許它不是應該共享的「可選擇」,而是另一種通用指令 - 也可能是我沒有正確理解你的需求。 –

+0

這是我關於合作指令的想法:http://jsfiddle.net/om0c875j/1/ - 'selectable'和'remoteAction'依賴'attributeHolder'來配合,但視圖是「正式記錄」。 –