0

私はこの指令を持っています

angular.module('xxx', [
])
    .directive('qnDropdown', [
        '$parse',
        function($parse) {
            return {
                restrict: 'A',
                require: 'ngModel',
                link: function(scope, elem, attr, ngModel) {
                    scope.$watch(attr.qnDropdown, function(source) {
                        var model = $parse(attr.ngModel);

                        elem.kendoDropDownList({
                            dataTextField: "Name",
                            dataValueField: "ID",
                            value: attr.value,
                            select: function(e) {
                                var item = this.dataItem(e.item.index());
                                scope.$apply(function() {
                                    model.assign(scope, item.value);
                                });
                            },
                            //template: '<strong>${ data.Name }</strong><p>${ data.ID }</p>',
                            dataSource: source
                        });

                    });
                }
            };
        }]);

入力欄は

<input qn:dropdown="locations" ng:model="installation.LocationID" value="{{installation.LocationID}}" />

すべて正常に動作しますが、kendoDropDownList の初期値が入力されていません (値: attr.value)。私は間違った場所や時間に何かをしていると思いますが、何がわかりませんか?

4

3 に答える 3

0

{{installation.LocationID}}あなたが期待する価値があると確信していますか?私の状況に合わせていくつかの調整を加えてコードをコピーして貼り付けることができ、ドロップダウンリストは素晴らしく機能しています(私のために大変な仕事をしてくれてありがとう!)。value入力フィールドにデータを入力しています。ディレクティブが実行されると、それattr.valueがあり、Kendo は期待どおりに表示します。おそらく、これは数バージョン前の Angular の問題でしたか?

于 2013-02-05T18:30:09.860 に答える
0

おそらく使用する必要があります$observe

$observe補間を含む属性の値の変化を観察するために使用します (例: src="{{bar}}")。これは非常に効率的であるだけでなく、実際の値を簡単に取得する唯一の方法でもあります。これは、リンク段階では補間がまだ評価されておらず、この時点で値が未定義に設定されているためです。-- docs、セクション属性を参照してください。

最近 $observe を使用した例を次に示します。$watch を使用している @asgoth の回答も参照してください。ただし、彼は分離スコープも作成しました。

$observe をいつ使用する必要があるか、いつ $watch を使用できるかについては、まだ明確ではありません。

于 2013-01-12T17:48:24.657 に答える
0

私は同じ問題を抱えていましたattr.value。空でした。この問題は、データを取得するために行われる $http 非同期呼び出しに関連していました。ドロップダウン リストがディレクティブで定義されているときに、スコープ データがまだ入力されていませんでした。

ディレクティブのリンク関数ではattr.ngModelなく、監視することでこれを修正しました。attr.qnDropdownこのようにして、スコープ データが入力されるときにドロップダウンリストが定義されます。

于 2014-01-15T18:37:39.457 に答える