0

以下のコードを考慮して、uniqueAttribute条件を満たす場合、ng-modelを2つの異なるオブジェクトで動的に構築しようとしています。以下は関数を割り当ててng-modelを動的に作成する方法はありますか?

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

それはng-model

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

にバインドするvm.abcまたはvm.defを返します。しかし、それはとエラーがスロー機能さ:

Error: [ngModel:nonassign] Expression 'vm.isUniqueAttribute(entityDefinition)' is non-assignable.

は次のようにそれを処理する方法はありますかこれを達成するための代替方法はありますか?

私はいくつかの単一のオブジェクトを割り当てて、後で2つの異なるオブジェクトに最終的なオプションとして分類することによって行うことができます。しかし、多大な労力を要することなく処理できるかどうかは不思議です。

+0

コードは正常に動作する必要があります。 'entityDefinition'(パラメータ)は定義されていますか?問題はパラメータ内のみです。 – SaiUnique

+0

は機能をng-modelに割り当てることができません – Mithun

+0

パラメータ自体を使用して構築する必要があります。 trueの場合、trueオブジェクトまたはfalseオブジェクトにバインドします – Mithun

答えて

0

2つの異なる要素を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 /> 
+0

から渡されたデータですが、これは可能です。しかし、このテキストフィールドはループで形成されているという制約があります。このアプローチでは、常に2つの入力フィールドがあります。そして10の場合、それは倍です。 – Mithun

0

あなたはobjectvm.modelCollection)のプロパティとしてごng-modelを設定し、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'; 
} 

私は、このアプローチは、ニーズ

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

で見つけることができるため、完全なコード、それはあなたの問題を解決するかどうかの答えとしてこれをマークすることを忘れないでください!

関連する問題