有没有办法分配一个函数并动态创建 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.abcvm.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

找到

如果解决了您的问题,请记得标记为答案!