1

私のアプリは、Web サービスからのデータに基づいて動的フォームを生成します。

たとえば、Web サービスは [{Name:'Age',DataType:'Number'},{Name:'PhoneNumber',DataType:'Phone'}] を返す場合があります。

HTML では、フィールド リストは次のようにバインドされます。

<div ng-repeat="v in model.Variables">
    <input type="text" ng-model="v.Value" dynamic-variable="{{v.DataType}}" />
</div>

DynamicVariable は attrs.DynamicVariable の変更を監視し (値はリンク中に変更されます)、型に基づいてカスタム アクションを実行するディレクティブです (たとえば、「Phone」データ型の場合、入力要素にマスクを適用します)。

タイプが「数値」の場合、いくつかの追加機能を持つ数値コントロールを作成するために、いくつかのスパンで既存の要素をラップする必要があります。

var minusButton = '<button type="button" class="button number-down">-</button>';
var wrapper = '<span class="number input margin-right"></span>';
var plusButton = '<button type="button" class="button number-up">+</button>';
element.attr('size', '3');
element.wrap(wrapper);
element.before(minusButton);
element.after(plusButton);

ただし、これはモデル バインディングを壊すようです。要素がさらに html でラップされると、モデルへの/からのバインディングは行われなくなります。同様に、 element.replaceWith() アプローチもバインディングを壊します。

なぜこれが起こるのか、または回避策は何ですか? ありがとう!

4

1 に答える 1

2

独自の動的 dom ビューを実装する代わりに、Angular ディレクティブを使用して支援します。この例でng-switchは、役に立つかもしれません。

http://plnkr.co/edit/VykyIo

于 2012-10-05T00:19:12.723 に答える