私はangularjsでカスタムディレクティブを定義しました。基本的には、ユーザーが選択ボックスから値を選択し、配列に値を追加するということです。これにより、私のカスタムディレクティブが呼び出され、画面上に新しい要素がレンダリングされます。私は、ディレクティブがコントローラの属性にバインドするために生成するテキストフィールドを必要とします。ディレクティブ内でng-modelを使用する
Htmlの
<device-list ng-repeat="device in devices" key="device.key" display-name="device.display_name" bind-prefix="descriptions"></device-list>
指令
angular.module('device_list_tag', []).
directive('deviceList', function() {
return {
restrict: 'E',
require: '?ngModel',
scope: {
devices: '=',
key: '=',
displayName: '=',
bindPrefix: '@'
},
link: function(scope, element, attrs) {
var deviceListElement = $(element)
var containerDiv = $('<div>')
.addClass('row')
var labelTag = $('<label>').text(scope.displayName)
.addClass('span1')
var bindField = attrs.bindPrefix+'.'+scope.key
var textField = $('<input>')
.addClass('span3')
.attr('ng-model', bindField)
containerDiv.append(labelTag)
containerDiv.append(textField)
deviceListElement.append(containerDiv)
}
}
})
コントローラ
function DevicesCtrl($scope) {
descriptions = {}
}
としてNG-モデルは、ディレクティブのスコープに対してローカルであるかのようにそれが表示され、どのように私はそれを適用させますか親?ページにテキストフィールドがたくさんある場合
これは、選択ボックスで生成されたフィールドを除いて機能します。
通常、ディレクティブでテンプレート属性を使用してオブジェクトをバインドするのはなぜですか?例えば。:template: ' ...'これはテンプレートのためのものではありませんか?ページの一番下にある例のように:http://docs.angularjs.org/guide/directive –
問題は、ディレクティブ内でバインドする属性の名前がわかりません。私はテンプレートを使用しようとしましたが、私が遭遇した問題は{{some.random.attribute}}を動作させる方法でした。 – Mike
私は固定変数をバインドし、その変数をsome.random.attributeの値に更新します。私はそれが何かを考え出しました。たとえば、親スコープに接続されている、またはサーバーを呼び出すgetSomeRandomAttr(key)という関数を設定することができます。次に、関数を呼び出した後に固定変数を更新するだけです。 –