在AngularJS中加载控制器之前,如何强制视图加载模型值?
我正在尝试从控制器自动发布表单,而不在表单上进行任何用户交互。我在控制器中有一个private init()函数,用于触发窗体上的按钮单击。 但是隐藏的表单字段还没有得到值。如何确保在表单提交之前填充隐藏字段的值 谢谢你的建议在AngularJS中加载控制器之前,如何强制视图加载模型值?,angularjs,angularjs-controller,Angularjs,Angularjs Controller,我正在尝试从控制器自动发布表单,而不在表单上进行任何用户交互。我在控制器中有一个private init()函数,用于触发窗体上的按钮单击。 但是隐藏的表单字段还没有得到值。如何确保在表单提交之前填充隐藏字段的值 谢谢你的建议 <div> <form name="myForm" method="post" action="@Model.Settings["URL"]" ng-controller="MyCtrl"> <input type="hi
<div>
<form name="myForm" method="post" action="@Model.Settings["URL"]" ng-controller="MyCtrl">
<input type="hidden" name="userid" value="{{UserSettings.Settings.UserId}}">
<input type="hidden" name="amount" value="{{Payment.Amount}}">
<button id="payButton" type="submit" class="action blue"><span class="label">Pay</span></button>
<script language="javascript">
var UserSettings = (function (o) {
return o;
})(@Html.Raw(JsonConvert.SerializeObject(@Model)));
</script>
</form>
</div>
myControllers.controller('MyCtrl', ['$scope', '$state', '$element', 'dataService',
function ($scope, $state, $element, service) {
$scope.Payment = service.GetPayment());
$scope.UserSettings = UserSettings;
function init() {
// How can I force to have values in the hidden form fields before the button click that submits the form ?
$element.find('#payButton').trigger("click");
};
init();
}]);
您可以将填充放在定义状态的点上,该状态具有
MyCtrl
,如下所示:
.state('myState', {
// ...
resolve: {
Payment: ['dataService', function (dataService) {
return dataService.GetPayment();
}],
// Same for other objects needed
}
})
然后在控制器中:
myControllers.controller('MyCtrl', ['$scope', '$state', '$element', 'Payment',
function ($scope, $state, $element, Payment) {
$scope.Payment = Payment;
// Same for other objects needed
// Rest code
}
在resolve部分中的所有操作和承诺完成之前,控制器中的代码不会开始运行
更新:
您可以将init
调用放入$timeout
中
$timeout(function(){
init();
});
当然,您必须在控制器函数中注入
$timeout
以及其他依赖项。您可以将填充放在定义状态的点上,该状态具有MyCtrl
,如下所示:
.state('myState', {
// ...
resolve: {
Payment: ['dataService', function (dataService) {
return dataService.GetPayment();
}],
// Same for other objects needed
}
})
然后在控制器中:
myControllers.controller('MyCtrl', ['$scope', '$state', '$element', 'Payment',
function ($scope, $state, $element, Payment) {
$scope.Payment = Payment;
// Same for other objects needed
// Rest code
}
在resolve部分中的所有操作和承诺完成之前,控制器中的代码不会开始运行
更新:
您可以将init
调用放入$timeout
中
$timeout(function(){
init();
});
当然,您必须在控制器函数中注入
$timeout
以及其他依赖项。也许您应该在状态的解析阶段填充$scope.Payment
和$scope.UserSettings
。您使用的是Angular1还是2+?我使用的是AngularJS(1.4.3版本)。您使用的是用于状态的ui路由器吗?您可以发布该州的代码吗?在继续单击之前,您是否尝试使用$q服务加载数据?是的,我使用的是ui路由器。我将用代码更新我的帖子。也许你应该在州的解析阶段填充$scope.Payment
和$scope.UserSettings
。您使用的是Angular1还是2+?我使用的是AngularJS(1.4.3版本)。您使用的是用于状态的ui路由器吗?您可以发布该州的代码吗?在继续单击之前,您是否尝试使用$q服务加载数据?是的,我使用的是ui路由器。我将用代码更新我的帖子。实际上,控制器在运行init()之前已经获得了所需的所有数据。但问题是init()会触发一个按钮单击,以在视图中发布表单。但是视图的模型绑定还没有。使用$timeout
建议更新了我的答案。实际上,控制器在运行init()之前已经获得了所需的所有数据。但问题是init()会触发一个按钮单击,以在视图中发布表单。但是视图的模型绑定还没有。用$timeout
建议更新了我的答案。