$ scope更改未应用于角度1.2.16

时间:2014-05-14 01:06:46

标签: angularjs angularjs-directive angularjs-scope

我目前正在将成熟的应用程序从角度1.0.8升级到1.2.16版本。 在应用程序中,我们有很多指令封装bootstraps typeahead。像这样:

contacts.directive("contactsearch", 
    function($http, $parse, $modal) {

        return {
            restrict:   'A',
            require:    'ngModel',

            link: function(scope, element, attrs, ngModel) {
                var contacts = Array();
                //... xhr gets called. Then in the bootstrap 
               // update callback when results are present:

                scope.$apply(function() {
                    for (var i=0; i < contacts.length; i++) {
                        var ident = contacts[i].firstName + " " + contacts[i].lastName + " - " + contacts[i].company;
                        if (ident == item) {
                            $parse(attrs.ngModel).assign(scope, contacts[i]);
                            return;
                        }
                    }
                });
            }
        }
    }
});

HTML:

<input type="text" data-contactsearch data-ng-model="contact">

这曾经很好用。升级到1.2.16后,联系人仍应用于data-ng-model指定的父作用域属性,但视图未更新。我在这里缺少什么?

修改

此外,我在指令中使用了以下函数以及角度解析器和格式化程序:

function toContact(text) {
    if (text == "")
        $parse(attrs.ngModel).assign(scope, null);
}

function fromContact(contact) {
    if (contact !== undefined && contact != null) {
        var x = "";
        if (contact.firstName && contact.firstName != null)
            x += contact.firstName;
        if (contact.lastName && contact.lastName != null)
            x += " " + contact.lastName;
        if (contact.company && contact.company != null)
            x += " " + contact.company;

            linkIcon(contact);
            return x;
        }
    }

ngModel.$parsers.push(toContact);
ngModel.$formatters.push(fromContact);

0 个答案:

没有答案