angularjs - 为什么在选择中切换'多个'属性时ngModel'null'?
问题描述
我正在为一个用例开发一个片段,但为了保持简单,我进行了基本的multiple
切换练习。
问题是ngModel
当 select 的多个属性由通过绑定切换属性的指令动态切换时为 null:
预期行为
预期得到 选择和选项:ngModel: [1] ✓ | ngModel: 1 ✓ 多个=假 [选项] [ 1 •] [ 2 ] [ 3 ] 预期得到 选择和选项:ngModel: [1, 3] ✓ | ngModel:空✕ 多个=真 [选项] [ 1 •] [ 2 ] [ 3 •]
这个想法很简单,(再次)我有一个按钮可以切换一个布尔变量,因此可以在选择中切换多个属性。我是根据这些答案来制定指令的,因为人们建议这是一种更好的方法,那为什么不呢?!
我引用了这些帖子:
-使用 AngularJS 的条件多输入文件
- AngularJS中的条件多选指令
-有条件地将多个属性添加到 UI Select
The main problem is that my ngModel
works well when the select is not multiple
, but when it's switched, and I select more than one element, it becames null
.
对于这个愚蠢的简单问题,您是否有一种方法,或者我应该采用这种ngIf
方法并保持理智吗?
app.js:控制器
module.controller("myController", function($scope) {
$scope.options = [1, 2, 3, 4, 5, 6];
$scope.selected = [];
$scope.multiple = false;
$scope.print = function() {
console.log({ seleccion: $scope.selected, multiple: $scope.multiple});
};
$scope.toggleMultiple = function() {
$scope.multiple = !$scope.multiple;
}
$scope.onChange = function(item) {
console.log(item)
$scope.print();
}
});
app.js:指令
module.directive('ngMultiple', function () {
return {
restrict: 'A',
scope: {
ngMultiple: '='
},
link: function (scope, element, attr) {
var unwatch = scope.$watch('ngMultiple', function (newValue) {
if (newValue) {
element.attr('multiple', 'multiple');
} else {
element.removeAttr('multiple');
}
});
}
};
});
索引.html
<div ng-app="myModule">
<div ng-controller="myController">
{{message}} <br />
<select name="blabla"
ng-model="selected" id="blabla"
ng-multiple="multiple"
ng-options="o as o for o in options"
ng-change="onChange(selected)">
</select>
<p>{{selectModel.selection}}</p>
<p><button ng-click="print()">Print()</button></p>
<p><button ng-click="toggleMultiple()">Toggle Multiple</button></p>
</div>
</div>
解决方案
推荐阅读
- c# - 线程 - 保证得到最后的结果
- rust - 有条件地捕获闭包中的变量以实现自定义控制
- numpy - AttributeError:“numpy.float32”对象没有属性“__index__”
- html - 该值不会从下拉列表发送到 Express.js
- concrete5 - 在具体 5 中以强大的形式发布翻译验证消息
- python - 暂停 Python3 代码,直到 excel 宏完成
- vue.js - 从 dom -vuejs 中删除传单地图时禁用平移
- python - 如何使用列本地时间戳每小时创建主要刻度线
- bash - Diif 忽略包含某些内容的行
- node.js - 如何避免 http2 连接崩溃 Node.js