2014-01-07 42 views
0

我wiriting的方法來切換清單爲選中/取消,如下:檢查所有箱子切換方法不能正常工作像預期

$scope.checkAllToggle = function(dtProvider, destiny, ev) { 
    $(ev.currentTarget).parent().find('span').html()); 
     data[destiny] = []; 
     if ($(ev.currentTarget).parent().find('span').html()=='Check all') { 
      for (var val in data[dtProvider]) data[destiny].push(data[dtProvider][val].id); 
      $(ev.currentTarget).parent().find('span').html('Uncheck all'); 
     } 
     else $(ev.currentTarget).parent().find('span').html('Check all'); 

    } 

切換按鈕的標籤的每一次變化,但國家的複選框只有在點擊2次後纔會被檢查,從這一點開始每3次點擊更改一次。 有什麼問題?

追加

if(!$scope.$$phase) $scope.$apply(); 

的方法沒有什麼區別,因爲預謀$範圍數據

守則plunker:http://plnkr.co/edit/Zf6UzLbC4osRov7IR5Na?p=preview

回答

1

這種方式而不是做,這將是更容易方法來做到這一點。

進行主輸入並將其分配給模型。

<input type="checkbox" ng-model="master"> 

然後讓你的其他輸入與這樣的主人聯繫起來。

<input type="checkbox" ng-model="box1" ng-checked="master"> 
<input type="checkbox" ng-model="box2" ng-checked="master"> 
<input type="checkbox" ng-model="box3" ng-checked="master"> 

這是你的掠奪者與這些變化。 Master Checkbox Plunker

+0

是的,但你沒有使用'checklist-model'的設施 –

+0

你必須使用清單模型嗎?它是一個相當簡單的指令來實現複選框組,如果這是你需要的。 –

+0

因爲清單必須是動態的 –

0

我通過這樣做讓你的闖入者工作。

$scope.checkToggle = function(dtProvider, destiny, ev) { 
    $scope.data[destiny] = []; 
    if ($(ev.currentTarget).parent().find('span').html() == 'Check all') { 
    for (var val in $scope.data[dtProvider]){ 
     $scope.data[destiny].push($scope.data[dtProvider][val].id); 
     $(ev.currentTarget).parent().find('span').html('Uncheck all');   
    } 
    } else { 
    $(ev.currentTarget).parent().find('span').html('Check all'); 
    } 
    $scope.$apply(); 
}; 

我無法得到它,如果在調用安全一樣,如果{$範圍$適用();}工作($範圍$$階段!)。但它正在與直$範圍$申請( )。這可能與rootScope有關,需要以不同的方式安全地調用。

請參閱此鏈接:https://coderwall.com/p/ngisma

也有一些失蹤{}在你的代碼,可能已經造成了一些問題。