В angularjs ui-bootstrap как я могу установить начальную опцию в состояниях начальной загрузки и избежать '? undefined:undefined?' вариант?

Я пытаюсь решить старую проблему angularjs, которая на самом деле является ожидаемым: "Добавление ng-модели в предопределенный элемент Select добавляет неопределенный параметр" ( https://github.com/angular/angular.js/issues/1019),

Я работаю с ng 1.4.9, ui-bootstrap, ui-router и пытаюсь использовать "bootstrap-formhelpers-states" для списка выбора состояний. У меня есть jQuery в проекте для поддержки FullCalendar, для которого у меня есть директива ng, но я стараюсь не использовать его ни для чего другого.

Я могу заставить список состояний работать без необходимости загружать js начальной загрузки, но я не получаю привязку к Model для корректной работы над init, с чем у многих людей возникают проблемы.

Из этого вопроса ( почему представление angularJS нарушает Bootstrap Formhelper) я получил директиву для стран и адаптировал ее для государств:

angular.module("myApp").directive('statepicker', function ($parse) {
    return {
        restrict: 'A', // It is an attribute
        require: '?ngModel', // It uses ng-model binding
        scope: {
          ngModel: '='
        },
        link: function (scope, elem, attrs, ctrl) {
            // Add the required classes
            elem.addClass('bfh-states'); 
            // First we initialize the selec with the desired options
            elem.select({
                filter: (elem.attr('data-filter') == 'true') ? true : false
            }).on('change', function() {
                // Listen for the change event and update the bound model
                return scope.$apply(function () {
                    return scope.ngModel = elem.val();
                });
            });
            scope.$watch('ngModel', function (newVal, oldVal) {
                if (newVal != oldVal) {
                    elem.val(newVal);
            });
            // Initialize the states with the desired options
            return elem.bfhstates({
                flags: (elem.attr('data-flags') == 'true') ? true : false,
                country: 'US',
                state: scope.ngModel || 'CA',
                blank: false
            });
        }
    };
});

Поэтому, если я не добавляю 'ng-model' к элементу 'select', он инициализирует OK значением из параметров директивы (CA), но с привязкой модели это не делает; что-то делать с этим не является допустимым вариантом в списке (но это так). Проблема в том, что когда я редактирую существующий адрес, я хочу, чтобы список устанавливался из значения переменной модели, но когда он задан с помощью параметров начальной директивы, он не изменяется.

HTML:

<select statepicker id="stateList" name="state" class="form-control" ng-model="state" ng-init="initState()"></select>
<button ng-click="setState('NY')">Set State</button>

С привязкой к модели я могу использовать кнопку и наблюдатель, чтобы установить значение после загрузки, но попытка сделать это с помощью 'ng-init' просто не работает.

Функции контроллера:

$scope.state = 'IL';

$scope.initState = function() {
    $scope.setState('AZ');
};

$scope.setState = function(val) {
    $scope.state = val;
};

0 ответов

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