0

ng-model考虑到下面的代码,如果满足 uniqueAttribute 条件,我将尝试使用 2 个不同的对象动态构造。

<input type="text" class="form-control" ng-model="vm.isUniqueAttribute(entityDefinition)" required />

下面是它返回vm.abcvm.def绑定到的函数ng-model

            vm.isUniqueAttribute = function(entityDef) {
                return entityDef.isUnique === 'true' ? 'vm.abc': 'vm.def';
            }

但它会引发错误:

错误:[ngModel:nonassign] 表达式 'vm.isUniqueAttribute(entityDefinition)' 是不可分配的。

有没有办法像处理它一样或任何替代方法来实现这一目标?

我可以通过为其分配一些单个对象,然后将其分类为 2 个不同的对象作为最终选项。但是,只是想知道是否可以毫不费力地处理它。

4

3 回答 3

0

对两个模型使用两个不同的元素,并在 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 />
于 2017-02-14T13:39:15.160 回答
0

我建议使用具有动态内容的静态模型。我在示例中使用了“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找到

如果它解决了您的问题,请记住将其标记为答案!

于 2017-02-14T15:49:54.413 回答
0

您可以使用括号表示法将您设置ng-modelobject( ) 的属性,并使用该方法vm.modelCollection返回给定属性的名称。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';
 }

我不知道这种方法是否适合您的需求

于 2017-02-14T13:51:03.533 回答