2016-11-10 4 views
0

Я создаю набор полей выбора, которые привязаны к списку значений в моем представлении, используя директиву с тегом select в нем, на div. Они заполняются некоторыми значениями, но после их рендеринга я хочу установить значение в зависимости от уже сохраненного значения в нем.AngularJS Задает переменную области видимости до загрузки до отображения

Я пытаюсь сделать это, установив значение модели в ng-init, используя функцию, которую я вызываю в контроллере, который инициализирует массив с сохраненными значениями в нем.

Тем не менее, массив всегда не определен, когда отображаются поля выбора и вызывается ng-init.

Как обеспечить, чтобы переменная всегда была установлена, когда в ячейках выбора вызывается ng-init?

angular.module('myapp') 
    .controller('aclCtrl', function() 
    { 
     $scope.retrieveSetValues(id) 
     { 
      //.then promise to GET stored values, defined in a factory, sets variable that is accessed in initializeSelects() 
     } 
    $scope.retrieveSetValues($scope.myID); 
    } 

Вид:

директива селектор:

.directive("selector", [ 
    function() { 
     return { 
     controller: function() { 
      this.myValues= ['a', 'b', 'c']; 
     }, 
     require: 'ngModel', 
     controllerAs: 'ctrl', 
     scope: { 
      'ngModel': '=' 
     }, 
     template: '<select ng-model="innerModel" ng-change="updateInnerModel()" ng-options="v for v in ctrl.myValues"> </select>', 
     link: function(scope, elem, attrs, ngModelController) { 
      scope.innerModel = scope.ngModel; 
      scope.updateInnerModel = function() { 
      ngModelController.$setViewValue(scope.innerModel); 
      }; 
     } 
     }; 
    } 
    ]) 

Проблема заключается в том, что я не вижу переменную я устанавливаю в вызове возможности для retrieveSetValues() в вызове ng-init initializeSelects().

Я пробовал оба, вызывая его в контроллере и вызывая его от ng-init перед тем, как попытаться получить доступ к сохраненным значениям в initializeSelects().

Я новичок в угловом, мое понимание того, как работает весь цикл дайджест, - уровень новичка. :(

Любая помощь приветствуется !!

ответ

0

Вы также можете попробовать, что:

function selector() { 
return { 
    controller: function() { 
     this.myValues= ['a', 'b', 'c']; 
    }, 
    require: 'ngModel', 
    controllerAs: 'ctrl', 
    scope: { 
     'ngModel': '=' 
    }, 
    template: '<select ng-model="ngModel" ng-options="v for v in ctrl.myValues"> </select>', 
    link: function(scope, elem, attrs, ngModelController) { 

    } 
    }; 

}

HTML VIEW:

<div selector ng-model="vm.initialValue"></div> 

vm.initialValue будет в вашем контроллере.

Я создал скрипку для этого, отметьте это here

Надеюсь, это поможет.

+0

Спасибо Фабио, я на самом деле создаю набор выборок, и мне нужно установить их значения в цикле, либо в ng-init, либо в противном случае. (отредактировал код просмотра для вашей справки) –