Angularjs NG-модель не работает после использования собственной директивы

Мои данные JSON выглядят как

[{name:"a", content:[{name:"b", content:[{name:"c", id:1}, {...}]}, {...}]}, { имя: "...", содержание:[...]}]

и я хочу поместить его в select, где "a" и "b" - это optionGroup, только "c" - это опция. как это:


-b
с

Пример jsfidle находится здесь: http://jsfiddle.net/sunny_jerry/SHxBp/

Кажется, "ngOptions" не может удовлетворить мое требование, поэтому я определяю директиву так:

<select class="compo-tree" x-compo-tree colleges="colleges" ng-model="choice"></select>

directive('compoTreeNew', function($compile) {
    return {
        restrict: 'A',
        scope: {
            colleges: "=colleges",
            choice: "=ngModel"
        },
        link: function($scope, elm){
            $scope.$watch("colleges", function(){
                angular.forEach($scope.colleges, function(college) {
                    elm.append($("<optgroup>").attr("label", college.name));
                    angular.forEach(college["departments"], function(department) {
                        var optGroup = $("<optgroup>").attr("label", '- ' + department.name);
                        angular.forEach(department['disciplines'], function(discipline) {
                            optGroup.append($("<option>").attr("value", discipline.id).text(discipline.name));
                            if (!$scope.choice) { $scope.choice = discipline.id; }
                        });
                        elm.append(optGroup);
                    });
                });
            });
        }
    }
});

Он работает нормально, и я вижу изменения в объеме, когда я выбираю разные варианты.

Но я обнаружил, что не могу установить начальное значение выбора, а затем обнаружил, что не могу установить какой-либо выбор для управления "выбором" в любое время, кажется, что выбор стал односторонним связыванием, но мне нужно, чтобы он стал двусторонним связыванием,

Пример jsfidle находится здесь: http://jsfiddle.net/sunny_jerry/SHxBp/

Как я могу это исправить?

1 ответ

Решение

Вот способ заставить это работать, просто установите наблюдателя на choice

$scope.$watch( 'choice', function( val ) {
    elm.val( val );
});

http://jsfiddle.net/SHxBp/2/

Другие вопросы по тегам