2016-05-14 184 views
0

我有模擬與圖像的簡單的複選框一個指令:角指令不是雙向綁定

movieApp.directive("imageCheckbox", 
function() 
{ 
    return { 
     restrict: "E", 
     scope: { ngModel: '=' }, 
     template: 
      '<div ng-switch on="ngModel"> \ 
       <div ng-switch-when="true"> \ 
        <img src="/Content/Images/CheckTrue.png" ng-click="onClick()"> \ 
       </div> \ 
       <div ng-switch-default> \ 
        <img src="/Content/Images/CheckFalse.png" ng-click="onClick()"> \ 
       </div> \ 
      </div>', 
     link: function(scope, element, attrs) 
     { 
      scope.onClick = function() 
      { 
       scope.ngModel = !scope.ngModel; 
      }; 
     } 
    }; 
}); 

此工作的ng-repeat的罰款之外。但是,在ng-repeat之內,它不會雙向綁定到ngModel

ng-repeat是在表內,這樣的事情:

<tr class="movie-info-row" ng-repeat="movie in movies"> 
<div class="movie-checkbox"> 
    <image-checkbox ng-model="isSelectedToDownload" ng-click="onSelectToDownloadClick(movie.RefId)" /> 
</div> 

還有就是錶行內多了很多,但在這裏,是不相關的。 onSelectToDownloadClick處理程序的工作原理和給我正確的movie.RefId,但我的作用域上的isSelectedToDownload標誌未更新。它在ng-repeat之外時更新。

任何想法?

回答

0

我終於想通了這一點,也許這是對他人有用,以及:

ng-repeat指令創建自己的子範圍,其prototypically從父範圍繼承。

通過在onClick功能分配scope.ngModel = !scope.ngModel;其實我創建的子範圍的新變量ngModel,從而從而隱藏了父母的ngModel變量和禁用雙向綁定。

解決方案?有幾個。 我去控制器作爲語法(設置控制器vm),然後調用這樣的:

<image-checkbox ng-model="vm.isSelectedToDownload" ng-click="onSelectToDownloadClick(movie.RefId)" /> 

我不能改變prototypically遺傳變量本身;但是我可以改變他們的屬性。