如何根据条件在输入上分配 ng 模型中的变量
How to assign varaible in ng-model on input based on condition
我想根据条件分配ng-model变量。例如:
<input type="text" ng-model="item.model[multilang]" >
$scope.multilang
可以是"ENG","JP"(languages)
的,也可以是false
的。例如,如果multilang = "ENG"
和用户输入"Hello"
,则结果将是
item.model = {ENG:"Hello"}
问题是当$scope.multilang = false
时,我希望结果是
item.model = "Hello"
我找不到达到上述结果的方法。我认为一种解决方案是基于$scope.multilang
更改 ng 模型,因此当它为假时,它会将输入的 ng 模型更改为 = ng-model="item.model"
但我不知道该怎么做。
编辑我想到了一个解决方案:
<input ng-if="multilang" type="text" ng-model="item.model[multilang]" >
<input ng-if="!multilang" type="text" ng-model="item.model" >
但是有更好的方法来实现吗?
-----PLNKR示例-----
Angular 是一个非常灵活和强大的框架。你应该使用自定义指令和ngModel的getter/setter选项。
没有 ngModel 的 getter/setter 的指令可能如下所示:
<input type="text"
ng-model="val"
multilang="multilang"
multilang-model="item.model">
指令代码:
.directive('multilang', [function(){
return {
restrict: "A",
require: "ngModel",
scope: {
multilang: "=",
multilangModel: "="
},
link: function(scope, element, attr, ngModel){
ngModel.$viewChangeListeners.push(function()){
var value = ngModel.$modelValue;
if(scope.multilang !== false) {
if(typeof scope.multilangModel == 'undefined')
scope.multilangModel = Object.create(null)
scope.multilangModel[scope.multilang] = value
}
else {
scope.multilangModel = value
}
})
}
}
}])
--分叉的普伦克--
在使用 ngModel 的吸气剂/二传手的情况下
<input type="text"
ng-model="val"
multilang="multilang"
multilang-model="item.model"
ng-model-options="{ getterSetter: true }">
指令代码:
.directive('multilang', [function(){
return {
restrict: "A",
scope: {
multilang: "=",
multilangModel: "=",
val: "=ngModel"
},
link: function(scope, element, attr){
scope.val = function(newValue) {
if(scope.multilang !== false) {
if(typeof scope.multilangModel == 'undefined')
scope.multilangModel = Object.create(null)
return arguments.length ? (scope.multilangModel[scope.multilang] = newValue) : scope.multilangModel[scope.multilang];
}
else {
return arguments.length ? (scope.multilangModel = newValue) : scope.multilangModel;
}
}
}
}
}])
--分叉的普伦克--
在我看来,第二个更好。它具有与item.model
的双向绑定input
并在代码的其他位置更改item.model
时更改值。
试试这个:
<input ng-show="multilang" type="text" ng-model="item.model[multilang]" >
<input ng-hide="multilang" type="text" ng-model="item.model" >
相关文章:
- 如何将ng选项的索引作为angularJs中的值传递给模型
- 角度无线电按钮ng模型不起作用
- ng模型内的ng重复的ng重复开始
- 将输入值设置为ng模型属性[Angular]时出现问题
- 自定义指令中的AngularJS ng模型
- 如何为动态创建的文本区域中输入的值更新ng模型
- ng重复中的ng模型-初始化唯一作用域属性
- ng重复变量到ng模型
- 初始化ng模型时,Angular ui选择占位符不起作用
- 角度去抖动(ng模型选项)不起作用
- 即使 ng 模型有值,也使输入字段为空
- 选择框中带有关联的ng模型,选项中带有ng重复
- 为什么我的指令(使用链接)没有出现,并允许ng模型看到它
- NG-重复中断指令模型绑定
- AngularJS+IE 11+聚合物=ng模型未更新
- ng模型在$(element).clone()之后不起作用
- 为什么ng选项指令需要ng模型
- AngularJS ng下拉树结构的模型定义
- AngularJS:如何将视图中指定的模型(ng-bind)绑定到通过API可用的$资源
- 内有角度单选按钮模型ng重复