2016-11-10 85 views
0

我創建了一組選擇框,它們在我的視圖中使用帶有選擇標記的指令綁定到值列表,並在div上。它們被填充一些值,但是在渲染完成後,我想根據其中已存儲的值設置一個值。AngularJS在視圖加載前創建一個範圍變量

我想通過設置ng-init中的模型值,使用函數I調用控制器中的函數來初始化其中存儲的值的數組。

但是,當選擇框被渲染並且調用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()時調用。

我試過兩次,在控制器中調用它,並在我嘗試訪問initializeSelects()中保存的值之前調用它,從ng-init

我是新來的角,我對整個消化週期如何工作的理解是新手級別。 :(

任何幫助表示讚賞!

回答

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視圖:

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

vm.initialValue這將是在您的控制器中。

我創建了一個小提琴,檢查它here

我希望它有幫助。

+0

感謝法比奧,我實際上正在創建一組選擇,我需要在一個循環中設置它們的值,無論是在ng-init或其他。 (編輯視圖代碼供您參考) –