2016-04-21 46 views
1

我使用這個示例:https://jsfiddle.net/qnw8ogrk/1/來創建我的單選按鈕。

我希望能夠在單選按鈕使用$ scope.watch,但我不能使用:

$scope.watch('selected', ... 

我應該分配給.watch到能夠檢測每當用戶點擊一個單選按鈕?

回答

2

實際的錯誤是$scope.watch應該是$scope.$watch讓觀察者超過範圍變量不是好主意。我建議您使用ng-change,而不是將觀察者放在ng-model以上,只有在單選按鈕ng-model值發生變化時纔會啓動。

<label ng-repeat="option in options"> 
    <input type="radio" ng-change="test()" ng-model="$parent.selected" ng-value="option" />{{option}} 
</label> 

然後不要使用擺脫$parent符號來訪問的ng-repeat外範圍,你可以切換使用controllerAs模式,然後更改NG-控制器指令使用控制器的alias。也將改變,而不是$scope

標記

<div ng-controller="mainController as vm"> 
    <label ng-repeat="option in vm.options"> 
     <input type="radio" ng-change="vm.test()" ng-model="vm.selected" ng-value="option" />{{option}} 
    </label> 
</div> 

控制器的控制器實現,綁定值this(上下文)

appModule.controller('mainController', function($scope) { 
    var vm = this; 
    vm.selected = 'red'; 
    vm.options = ['red', 'blue', 'yellow', 'green']; 
    vm.test = function() { 
    alert('Changed'); 
    } 
}); 

Forked Plunkr

+0

謝謝,這樣做的工作。 –

+0

@MichaelNielsen很高興爲您效勞。謝謝 :-) –

2

我AG再見@PankajParker,但它也可能來自你的控制器。你剛剛得到的語法錯誤,這是$scope.$watch,不$scope.watch

看一看這個:https://jsfiddle.net/qnw8ogrk/32/

0

小提琴:https://jsfiddle.net/stevenng/qnw8ogrk/33/

標記

<div ng-app="app"> 
    <div ng-controller="mainController"> 
     <label ng-repeat="option in options"> 
      <input type="radio" ng-change="picked(this)" ng-model="$parent.selected" ng-value="option"/>{{option}} 
     </label> 
    </div> 
</div> 

腳本

var appModule = angular.module('app', []); 

appModule.controller('mainController', function($scope) { 

    $scope.selected = 'red'; 
    $scope.options = ['red', 'blue', 'yellow', 'green']; 
     $scope.picked = function($scope) { 
     alert('you picked: ' + $scope.selected); 
    } 
});