2015-04-07 115 views
0

我試圖用三個指令 - 容器,getter和setter來設置角度的應用程序。我已經把它在 http://plnkr.co/edit/CoYLuVbiZTFWvNsN5r5L?p=preview嵌套指令的角度隔離範圍

<container> 
    <getter name="first"></getter> 
    <getter name="second"></getter> 
    <setter name="setter"></setter> 
</container> 

Container具有可變value可以通過gettersetter讀取的範圍。 getter顯示值,而setter都顯示並更改值。

angular.module("app").directive('container', function() { 
     return { 
     scope: {}, 
     template: '<h1>Container <input ng-model="value"/></h1><div ng-transclude>SCOPED1</div>', 
     transclude: true, 
     controller: ["$scope", "$window", function($scope, $window){ 
      $scope.value = "Hello" 
     }] 
     }; 
    }); 

兩個gettersetter有自己的分離範圍,但也有一個雙向綁定到container範圍,以獲取和設置value

angular.module("app").directive('getter', function() { 
     return { 
     require: '^container', 
     scope: { 
      name: '@', 
      value:'=' 
      }, 
     template: '<p>I am getter {{name}}, I got {{value}}</p>' 
     }; 
    }); 

目前,gettersetter可以訪問使用$scope.$parent.$parent.valuecontainer範圍,但似乎太笨重。我認爲使用scope:{value:'='}會建立雙向綁定,但顯然不是。

我在做什麼錯?

http://plnkr.co/edit/CoYLuVbiZTFWvNsN5r5L?p=preview

+1

這可能是你想要的嗎? http://plnkr.co/edit/poW8JNbf1wrGNb7K0WBy?p=preview – Sam

回答

1

該指令隔離範圍並不自動鏈接到父範圍內的變量。您必須在父範圍內告訴指令value應該是value,這與提供指令名稱的方式相同。

<container value="value"> 
    <getter name="first" value="value"></getter> 
    <getter name="second" value="value"></getter> 
    <setter name="setter" value="value"></setter> 
</container> 
+0

謝謝你 - 不幸的是我已經糾正了代碼(http://plnkr.co/edit/CoYLuVbiZTFWvNsN5r5L?p=preview),但它沒有似乎工作。 – TDN169

+0

您是否期望它從容器指令中提取值?這根本不符合父範圍。 –

+0

對不起,這是我的.js文件中的一個錯誤 - 與@Sam的評論一樣,這一切都很有意義! – TDN169