我有一个带有空白选项和其他选项的选择框。这些选项不是使用ngOptions指令生成的,因为它们是在服务器端生成的(使用Symfony表单)。
在某些情况下,我想取消选择所选的选择框值。这样就选择了空白选项。但我不能让这个工作。选择框不会更新。
我创建了一个jsfiddle来显示问题。
HTML
<div ng-controller="MyCtrl">
<form name="form">
<select ng-model="foo.hero" name="foo[hero]" my-directive="">
<option value=""></option>
<option value="1">Batman</option>
<option value="2">Superman</option>
<option value="3">Spiderman</option>
</select>
</form>
<p>Selected: {{ foo.hero }}</p>
</div>
的javascript
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.foo = {hero: '2'};
}
myApp.directive('myDirective', function($timeout) {
return {
require: ['ngModel', '?form'],
link: function(scope, element, attrs, ctlrs) {
$timeout(function() {
var modelController = ctlrs[0];
modelController.$setViewValue('');
});
}
};
});
答案 0 :(得分:1)
调用$ setViewValue后使用modelController。$ render()。这将更新DOM元素。
myApp.directive('myDirective', function($timeout) {
return {
require: ['ngModel', '?form'],
link: function(scope, element, attrs, ctlrs) {
$timeout(function() {
var modelController = ctlrs[0];
modelController.$setViewValue('');
modelController.$render();
});
}
};
});
更新了小提琴here。
答案 1 :(得分:0)
这样做:
$timeout(function() {
scope.foo.hero = '';
});
因为你选择的模型是foo.hero,每当你改变它时,选择将改变所选择的。
答案 2 :(得分:0)
不确定为什么需要使用modelController
进行捣乱?你不能只是将模型更新为默认值吗?
myApp.directive('myDirective', function($timeout) {
return {
scope: {
model: '=?ngModel'
},
link: function(scope, element, attrs, ctlrs) {
$timeout(function() {
scope.model = '';
});
}
};
});
更新了小提琴here。