有没有办法分配一个函数并动态创建 ng-model?
Is there a way to assign a function and create ng-model dynamically?
考虑到下面的代码,如果满足 uniqueAttribute 条件,我正在尝试使用 2 个不同的对象动态构造 ng-model
。
<input type="text" class="form-control" ng-model="vm.isUniqueAttribute(entityDefinition)" required />
下面是 returns vm.abc
或 vm.def
绑定到 ng-model
的函数
vm.isUniqueAttribute = function(entityDef) {
return entityDef.isUnique === 'true' ? 'vm.abc': 'vm.def';
}
但它会抛出错误:
Error: [ngModel:nonassign] Expression
'vm.isUniqueAttribute(entityDefinition)' is non-assignable.
是否有类似的处理方式或其他替代方式?
我可以为它分配一些单个对象,然后将其分类为 2 个不同的对象作为最终选项。但是,只是想知道它是否可以不费力地处理。
在两个模型中使用两个不同的元素,并借助 ng-if 根据标志切换所需的元素。
<input type="text" class="form-control" ng-model="vm.abc" ng-if="vm.isUniqueAttribute(entityDefinition)" required />
<input type="text" class="form-control" ng-model="vm.def" ng-if="!vm.isUniqueAttribute(entityDefinition)"required />
您可以使用括号表示法将 ng-model
设置为 object
(vm.modelCollection
) 的 属性 和 return 给定名称属性 使用 isUniqueAttribute
方法。
<input type="text" class="form-control" ng-model="vm.modelCollection[vm.isUniqueAttribute(entityDefinition)]" required />
然后
vm.isUniqueAttribute = function(entityDef) {
return entityDef.isUnique === 'true' ? 'abc': 'def';
}
不知道这个方法是否适合你的需求
我建议使用具有动态内容的静态模型。我在示例中使用了 "ng-init" 来提供动态数据,尽管您可以依靠控制器根据需要提供它。 (如此处所述https://docs.angularjs.org/api/ng/directive/ngInit)
示例代码:
$scope.Model = [];
$scope.SetModelWithDynamicContent = function(index) {
if ($scope.Model.indexOf(index) == -1) {
//Add your conidition here(.isunique). I have used odd or even number.
if (index % 2 == 0)
$scope.Model.push({
Property: "Bind vm.abc"
});
else
$scope.Model.push({
Property: "Bind vm.def"
});
}
它的完整代码可以在 http://plnkr.co/edit/gFa26r?p=preview
找到
如果解决了您的问题,请记得标记为答案!
考虑到下面的代码,如果满足 uniqueAttribute 条件,我正在尝试使用 2 个不同的对象动态构造 ng-model
。
<input type="text" class="form-control" ng-model="vm.isUniqueAttribute(entityDefinition)" required />
下面是 returns vm.abc
或 vm.def
绑定到 ng-model
vm.isUniqueAttribute = function(entityDef) {
return entityDef.isUnique === 'true' ? 'vm.abc': 'vm.def';
}
但它会抛出错误:
Error: [ngModel:nonassign] Expression 'vm.isUniqueAttribute(entityDefinition)' is non-assignable.
是否有类似的处理方式或其他替代方式?
我可以为它分配一些单个对象,然后将其分类为 2 个不同的对象作为最终选项。但是,只是想知道它是否可以不费力地处理。
在两个模型中使用两个不同的元素,并借助 ng-if 根据标志切换所需的元素。
<input type="text" class="form-control" ng-model="vm.abc" ng-if="vm.isUniqueAttribute(entityDefinition)" required />
<input type="text" class="form-control" ng-model="vm.def" ng-if="!vm.isUniqueAttribute(entityDefinition)"required />
您可以使用括号表示法将 ng-model
设置为 object
(vm.modelCollection
) 的 属性 和 return 给定名称属性 使用 isUniqueAttribute
方法。
<input type="text" class="form-control" ng-model="vm.modelCollection[vm.isUniqueAttribute(entityDefinition)]" required />
然后
vm.isUniqueAttribute = function(entityDef) {
return entityDef.isUnique === 'true' ? 'abc': 'def';
}
不知道这个方法是否适合你的需求
我建议使用具有动态内容的静态模型。我在示例中使用了 "ng-init" 来提供动态数据,尽管您可以依靠控制器根据需要提供它。 (如此处所述https://docs.angularjs.org/api/ng/directive/ngInit)
示例代码:
$scope.Model = [];
$scope.SetModelWithDynamicContent = function(index) {
if ($scope.Model.indexOf(index) == -1) {
//Add your conidition here(.isunique). I have used odd or even number.
if (index % 2 == 0)
$scope.Model.push({
Property: "Bind vm.abc"
});
else
$scope.Model.push({
Property: "Bind vm.def"
});
}
它的完整代码可以在 http://plnkr.co/edit/gFa26r?p=preview
找到如果解决了您的问题,请记得标记为答案!