AngularJS在视图加载前创建一个范围变量

问题描述:

我创建了一组选择框,它们在我的视图中使用带有选择标记的指令绑定到值列表,并在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

我是新来的角,我对整个消化周期如何工作的理解是新手级别。 :(

任何帮助表示赞赏!

你也可以试试:

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或其他。 (编辑视图代码供您参考) –