私は新しい角度にあり、投票投票アプリケーションを作成しようとしています。今私は4つの入力ボックスを持っています。新しい投票を作成するときに使用する1つの質問と3つの回答。別の回答を追加する場合は、新しい入力ボックスを追加するボタンもあります。 DOMにコンテンツを動的に配置したい場合は、ディレクティブを使用する必要があります。私は、他のコンテンツと一緒に配列にあるコンテンツにアクセスできるように、ng-model属性を追加する必要のある新しいhtmlコンテンツを追加するものを作成しました。元々そこにあった入力ボックスは正常に動作しますが、新しいボックスを追加するとそのボックスにはアクセスしません。動的に追加されたディレクティブですが、内容が表示されません
指令/ファンクションコード:入力ボックスのリストに新しいディレクティブを追加します
votingApp.directive('addAnswers', [function(){
return {
template:"<li><input type='text' ng-model='choices[3]' /></li>",
restrict: 'E'
}
}]);
機能。
$scope.addAnswer = function(){
var node = document.createElement("LI");
var textnode = document.createElement("add-answers");
node.appendChild(textnode);
$scope.pollAnswers.appendChild(node);
};
最後に、HTMLのどこに追加する必要がありますか。
<form ng-submit="createPoll()">
<p>Question</p>
<input type="text" ng-model="pollQuestion" />
<p>Answers</p>
<ul id="answers">
<li><input type="text" placeholder=" " ng-model="choices[0]" /></li>
<li><input type="text" placeholder=" " ng-model="choices[1]" /></li>
<li><input type="text" placeholder=" " ng-model="choices[2]" /> </li>
</ul>
<input id="create" type="submit" value="Create Poll" />
</form>
基本的に私は新しい入力を追加するので、ng-model =を配列の長さにします。しかし、これを行うと、新しい要素を追加するときに配列がスロットを大きくしません。あなたのHTMLコードは、あなたがここに
var textnode = document.createElement("add-answers");
注入されているためです
plunkは私ディレクティブを使用することを意味します。私の答えは本質的に単なるアイデアです。 – csschapker
ねえ、プランカが本当に助けてくれました。私は私が探していた意図した機能を持っていると思います。唯一混乱する部分は、html要素に "choices"という選択肢があり、またディレクティブのテンプレートであるscopeの部分がある理由です。私の推測では、HTMLの属性を作っています私たちは私たちの李の中で自由に選択配列を使用することができますか? –
nj51
[指令](https://docs.angularjs.org/guide/directive)のAngularの文書をチェックすることができます。それは、指示の観点からどの範囲があるかを説明します。この場合、$ scope.choices(コントローラから)をchoicesというスコープの値にバインドしています。 'choices: '=''は、親スコープからディレクティブへの2ウェイバインディングを使用すると述べています。 – csschapker