我搜索并尝试了许多ng-xxxx类型的选项,但找不到一个.. 我只想在选择单选按钮时调用控制器中的某些功能。
所以它可能类似于以下..(当然,下面的代码不起作用)
<input type="radio" ng-model="value" value="one" ng-click="checkStuff()"/>
有没有办法达到我想要的目的?
答案 0 :(得分:224)
在单选按钮选择上至少有两种不同的方法来调用函数:
1)使用ng-change
指令:
<input type="radio" ng-model="value" value="foo" ng-change='newValue(value)'>
然后,在控制器中:
$scope.newValue = function(value) {
console.log(value);
}
这是jsFiddle:http://jsfiddle.net/ZPcSe/5/
2)观察模型的变化。这不需要输入级别的任何特殊内容:
<input type="radio" ng-model="value" value="foo">
但是在控制器中会有:
$scope.$watch('value', function(value) {
console.log(value);
});
和jsFiddle:http://jsfiddle.net/vDTRp/2/
了解有关您的用例的更多信息将有助于提出适当的解决方案。
答案 1 :(得分:17)
如果触发源不是点击,则应使用ngChange而不是ngClick。
以下是你想要的吗?在你的情况下究竟什么不起作用?
var myApp = angular.module('myApp', []);
function MyCtrl($scope) {
$scope.value = "none" ;
$scope.isChecked = false;
$scope.checkStuff = function () {
$scope.isChecked = !$scope.isChecked;
}
}
<div ng-controller="MyCtrl">
<input type="radio" ng-model="value" value="one" ng-change="checkStuff()" />
<span> {{value}} isCheck:{{isChecked}} </span>
</div>
答案 2 :(得分:8)
在更新版本的角度(我使用1.3)你可以基本上设置模型和值,双重绑定完成所有工作,这个例子像魅力一样:
angular.module('radioExample', []).controller('ExampleController', ['$scope', function($scope) {
$scope.color = {
name: 'blue'
};
}]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<html>
<body ng-app="radioExample">
<form name="myForm" ng-controller="ExampleController">
<input type="radio" ng-model="color.name" value="red"> Red <br/>
<input type="radio" ng-model="color.name" value="green"> Green <br/>
<input type="radio" ng-model="color.name" value="blue"> Blue <br/>
<tt>color = {{color.name}}</tt><br/>
</form>
</body>
</html>
&#13;
答案 3 :(得分:2)
另一种方法是使用Object.defineProperty
将value
设置为控制器作用域中的getter setter属性,然后对value属性的每次更改都将触发setter中指定的函数:
HTML文件:
<input type="radio" ng-model="value" value="one"/>
<input type="radio" ng-model="value" value="two"/>
<input type="radio" ng-model="value" value="three"/>
javascript文件:
var _value = null;
Object.defineProperty($scope, 'value', {
get: function () {
return _value;
},
set: function (value) {
_value = value;
someFunction();
}
});
请参阅此plunker了解实施
答案 4 :(得分:2)
我更喜欢使用ng-value和ng-if, [ng-value]将处理触发器更改
1000ms
答案 5 :(得分:2)
对于动态值!
<div class="col-md-4" ng-repeat="(k, v) in tiposAcesso">
<label class="control-label">
<input type="radio" name="tipoAcesso" ng-model="userLogin.tipoAcesso" value="{{k}}" ng-change="changeTipoAcesso(k)" />
<span ng-bind="v"></span>
</label>
</div>
控制器中的
$scope.changeTipoAcesso = function(value) {
console.log(value);
};
答案 6 :(得分:-1)
<form name="myForm" ng-submit="submitForm()">
<label data-ng-repeat="i in [1,2,3]"><input type="radio" name="test" ng-model="$parent.radioValue" value="{{i}}"/>{{i}}</label>
<div>currently selected: {{radioValue}}</div>
<button type="submit">Submit</button>
</form>