我想管理AngularJS UI,它允许选择其中一个选项(显示为单选按钮组)或输入文本中键入的自定义值。
应该看起来像: http://jsbin.com/foyujali/7/edit
以下是您可以在以下链接中看到的代码:
HTML
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.14/angular.js"></script>
<div ng-app="tagsApp" ng-controller="TagsCtrl">
<input type="radio" id="conversion_type_sale" ng-model="tag.conversion_type" value="sale"/>
<label for=conversion_type_sale>Sale</label>
<input type="radio" id="conversion_type_lead" ng-model="tag.conversion_type" value="lead"/>
<label for=conversion_type_lead>Lead</label>
<input type="radio" id="conversion_type_custom" ng-model="tag.conversion_type" value="{{tag.conversion_type_custom_value}}"/>
<input type="text" placeholder="Custom" ng-model="tag.conversion_type_custom_value" id="conversion_type_custom_value"/>
<p>
The choosen conversion type is: <strong>{{tag.conversion_type}}</strong>
</p>
</div>
和JS:
angular.module('tagsApp', []).
controller('TagsCtrl', function ($scope) {
$scope.tag = {conversion_type: 'lead'};
});
我不想使用ngChange指令,所以我只是将value
或ng-value
(我试过两者)绑定到输入文本的模型。它没有这种方式正常工作,但我想有一个优雅的AngularJS解决方案。有什么建议吗?
提前致谢!
P.S。只是为了澄清 - 我想要以下功能:http://jsbin.com/foyujali/10/edit但我想避免使用ngChange指令。
答案 0 :(得分:3)
这就是您要找的内容:http://jsfiddle.net/colares/shcv8e1h/2/
解释行为
为此,我必须在自定义选项输入中使用更多内容:
答案 1 :(得分:1)
您可以使用$ scope。$ watch并在控制器中查找更改,如下所示:
var app = angular.module('tagsApp',[]);
app.controller('TagsCtrl', function ($scope) {
$scope.tag = {conversion_type: 'lead'};
$scope.$watch('conversion_type_custom_value',function(new_val) {
if (new_val) {
$scope.tag.conversion_type = new_val;
}
});
});
答案 2 :(得分:0)
$ watch是最佳选择。此外,您可以创建自己的东西(例如,观察输入框的长度),并使用第二个参数对其执行所需的操作,而不是在$ watch的第一个参数中使用modelName。