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}}")。这不仅非常有效,而且也是轻松获得实际值的唯一方法,因为在链接阶段尚未评估插值,因此此时该值设置为未定义。-文档,请参阅属性部分。

这是我最近使用 $observe的示例。另请参阅@asgoth 的答案,他在那里使用 $watch,但他也创建了一个隔离范围。

我仍然不清楚何时需要使用 $observe 以及何时可以使用 $watch。

于 2013-01-12T17:48:24.657 回答
0

我有同样的问题,attr.value是空的。该问题与为获取数据而进行的 $http 异步调用有关。在指令中定义下拉列表时,范围数据尚未填充。

我通过观看attr.ngModel而不是attr.qnDropdown在指令的链接功能中解决了这个问题。这样,在填充范围数据时就可以定义下拉列表。

于 2014-01-15T18:37:39.457 回答