2013-03-19 82 views
1

事件,我創建了圍繞創建使用ngTransclude一些內容的DIV-包裝一個指令。看到這個很簡單的例子:http://jsfiddle.net/DHzrr/1/angular.js指令燕子從transclude

如果從HTML

<div ng-controller="TodoCtrl"> 
    <form ng-submit="addTodo()"> 
    <input type="checkbox" ng-model="checked"> 
    </form> 
    <div ng-hide="checked">NOT CHECKED</div> 
</div> 

的「NG隱藏」監聽器正在刪除該組元素。因此,我的組指令會吞噬事件,從而釋放或隔離$ scope。我該如何做這項工作?

我想使用的範圍時,一個新的範圍只創建:真實屬性的指令定義對象。

回答

2

transclude: true創建一個新的子作用域prototypically從父(TodoCtrl)範圍繼承。您可以通過三種方式解決問題:

  1. (推薦)結合父範圍定義的對象屬性:ng-model="obj.checked",並在你的控制器:$scope.obj = {checked: false}
    fiddle
  2. 使用ng-model="$parent.checked"
  3. 使用函數,在父更新模型:添加ng-change="toggle()"input,那麼你的控制器上定義一個函數:$scope.toggle = function() { $scope.checked = !$scope.checked }

看到一個「What are the nuances of scope prototypal/prototypical inheritance in AngularJS?」第號指令項目「4。 transclude: true

+0

感謝您的。現在,我發現關於這個話題,你出色的解釋中所有其他線程。我想我現在明白了怎麼回事,但我不是100%幸運的,因爲理想,我不想改變控制器也不模型和指令應該只添加「佈局包裝」。接縫並不容易,因爲我以爲。 – chrise 2013-03-20 09:00:02

+1

@chrise,「最佳實踐」(根據[MISKO(http://www.youtube.com/watch?v= ZhfUv0spHCY及功能= youtu.be&T = 30米))是使用在$範圍引用您的車型。所以,你得到太遠沿着你的架構前,你可能要重新審視,那麼它應該是更容易爲你的指令添加版面包裝 – 2013-03-20 14:27:12

+0

沒錯。感謝Mark的幫助。 – chrise 2013-03-20 19:14:10

相關問題