Javascript 选择的角度指令不';我不能得到更新

Javascript 选择的角度指令不';我不能得到更新,javascript,angularjs,angularjs-directive,jquery-chosen,Javascript,Angularjs,Angularjs Directive,Jquery Chosen,我已经为Selected和Angular学习了这个很棒的教程()(代码基本相同) 这是我的指示: app.angularModule.directive('chosen', function() { var linker = function (scope, element, attrs) { var list = attrs['chosen']; scope.$watch(list, function () { element.

我已经为Selected和Angular学习了这个很棒的教程()(代码基本相同)

这是我的指示:

app.angularModule.directive('chosen', function() {
    var linker = function (scope, element, attrs) {
        var list = attrs['chosen'];

        scope.$watch(list, function () {
            element.trigger('chosen:updated');
        });

        element.chosen({ width: '350px'});
    };

    return {
        restrict: 'A',
        link: linker
    };
});
app.angularModule.directive('chosen', function() {
    var linker = function (scope, element, attrs) {
        var list = attrs['chosen'];

        scope.$watch(list, function () {
            element.trigger('chosen:updated');
        });

        scope.$watch(attrs['ngModel'], function() {
            element.trigger('chosen:updated');
        });

        element.chosen({ width: '350px'});
    };

    return {
        restrict: 'A',
        link: linker
    };
});
以下是html:

<select data-placeholder="Choose a Category"  multiple class="col-lg-8 chosen-select" chosen="items"
                            ng-options="item._backingStore.Name for item in items"   ng-model="selectedCategories" >
                    </select>
我已经记录了$scope.selectedCategories,它们一切正常,但由于某些原因,在selected中没有选择任何内容

那么,我做错了什么?我该如何修复它

编辑

我注意到,当我选择一些项目时,关闭模式,再次打开它,所选的值再次出现,尽管我将这一行放在$watch中

$scope.selectedCategories = "";
编辑2

所以我把这个问题留了一段时间,因为我有更重要的事情要处理。
我尝试过不选择,即使用“正常”选择和代码工作。因此,我选择的指令显然不能正常工作。

我已经解决了它,解决方案实际上非常简单和直接(当你了解角度指令的工作原理时)。以下是指令的完整代码:

app.angularModule.directive('chosen', function() {
    var linker = function (scope, element, attrs) {
        var list = attrs['chosen'];

        scope.$watch(list, function () {
            element.trigger('chosen:updated');
        });

        element.chosen({ width: '350px'});
    };

    return {
        restrict: 'A',
        link: linker
    };
});
app.angularModule.directive('chosen', function() {
    var linker = function (scope, element, attrs) {
        var list = attrs['chosen'];

        scope.$watch(list, function () {
            element.trigger('chosen:updated');
        });

        scope.$watch(attrs['ngModel'], function() {
            element.trigger('chosen:updated');
        });

        element.chosen({ width: '350px'});
    };

    return {
        restrict: 'A',
        link: linker
    };
});

以前解决方案的注释的更扩展版本。 与作者一样,在HTML标记中,我提供了类似于
selected=“vm.myCollection”
的源代码集合,实际上使用regexp解析
ng options
ng repeat
属性更好,可能更晚。 与OP不同,我对数组使用$watchCollection,并在作用域即将销毁时调用unwatches

(function () {
    'use strict';
    angular.module('common.directives').directive('chosen', enterPressDirective);

    function enterPressDirective() {
        return {
            restrict: 'A',
            link: function (scope, elm, attrs) {
                var unwatchModel = scope.$watch(attrs.ngModel, function () {
                    elm.trigger('chosen:updated');
                });

                var unwatchSource = scope.$watchCollection(attrs.chosen, function () {
                    elm.trigger('chosen:updated');
                });

                elm.chosen();

                scope.$on('$destroy', function () {
                    unwatchModel();
                    unwatchSource();
                });
            }
        };
    }
}());

这正是我想要的,非常感谢!!在我看来,这真的应该是所选指令的一部分,强制库的用户执行这样的操作是很奇怪的。实际上,在集合上你应该使用
范围。$watchCollection(list,func)
,还有
$watch*
返回函数停止监视,当
$scope
销毁时应调用:
scope.$on('$destroy',function(){unwatchModel();unwatchSource();})