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
我希望它有帮助。
感谢法比奥,我实际上正在创建一组选择,我需要在一个循环中设置它们的值,无论是在ng-init或其他。 (编辑视图代码供您参考) –