我正在使用此示例:https://jsfiddle.net/qnw8ogrk/1/来创建我的单选按钮。
我希望能够在收音机按钮上使用$ scope.watch,但我无法使用:
$scope.watch('selected', ...
我应该为.watch分配什么,以便能够在用户点击单选按钮时进行检测?
答案 0 :(得分:2)
$scope.watch
的实际错误应该是$scope.$watch
观察范围变量的观察者不是好主意。而不是将观察者置于ng-model
之上,我建议您使用ng-change
,这只会在单选按钮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-controller指令以使用{控制器{1}}这也将改变控制器实现,将值绑定到alias
(上下文)而不是this
<强>标记强>
$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>
答案 1 :(得分:2)
我同意@PankajParker,但也可以从你的控制器那里获得。您的语法错误,它是$scope.$watch
,而不是$scope.watch
答案 2 :(得分: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);
}
});