我使用這個示例:https://jsfiddle.net/qnw8ogrk/1/來創建我的單選按鈕。
我希望能夠在單選按鈕使用$ scope.watch,但我不能使用:
$scope.watch('selected', ...
我應該分配給.watch到能夠檢測每當用戶點擊一個單選按鈕?
我使用這個示例:https://jsfiddle.net/qnw8ogrk/1/來創建我的單選按鈕。
我希望能夠在單選按鈕使用$ scope.watch,但我不能使用:
$scope.watch('selected', ...
我應該分配給.watch到能夠檢測每當用戶點擊一個單選按鈕?
實際的錯誤是$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');
}
});
我AG再見@PankajParker,但它也可能來自你的控制器。你剛剛得到的語法錯誤,這是$scope.$watch
,不$scope.watch
小提琴: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);
}
});
謝謝,這樣做的工作。 –
@MichaelNielsen很高興爲您效勞。謝謝 :-) –