AngularJS在模态输入后更新选择控件
这是我表单的选择控件:AngularJS在模态输入后更新选择控件,angularjs,Angularjs,这是我表单的选择控件: <select ng-model="truckMfg.truckMfgs" ng-options="truckMfg.Name for truckMfg in truckMfgs"> <option value="" selected>Select Truck Manufacturer ..</option> </select> function TruckMfgCtrl($scope, $routeParams
<select ng-model="truckMfg.truckMfgs" ng-options="truckMfg.Name for truckMfg in truckMfgs">
<option value="" selected>Select Truck Manufacturer ..</option>
</select>
function TruckMfgCtrl($scope, $routeParams, $http, API, $location) {
$scope.truckMfgs = API.GetTruckMfgs(); // <-- this works at initialization
$scope.save = function () {
$http.post('/api/TruckMfgs/', $scope.truckMfg) // data does get saved corectly
.success(function () {
})
.error(function (data) {
alert(data);
});
setTimeout(function () {
$scope.truckMfgs = API.GetTruckMfgs(); // <-- this is not working
$scope.$apply();
}, 1000);
};
尊敬的,你能给我看看你推荐的代码吗?谢谢
(PS:查看了您的个人资料,我也喝cawfee并带我的dawghter去mawl,但不是在挪威):我认为没有必要在save()中调用GetTruckMfgs(),因为您已经有了需要添加到TruckmKmfgs列表中的数据。因此,让save()将
$scope.truckMfg
添加到$scope.truckMfgs
。这样可以避免再次访问服务器
如果要确保在更新选择列表之前成功发布数据,可以在success()回调中执行此操作。如果希望用户界面更新更快(即响应更快),可以在save函数中的post()调用之前(或之后)执行此操作,然后处理错误回调中的任何错误(例如,如果post()失败,则从选择列表中删除项)。您尝试的操作看起来是正确的。如果在添加$scope.truckMfg后记录$scope.truckMfgs,它看起来正确吗?如果是这样的话,那么我需要查看更多的代码来进一步帮助您。我住在新泽西州中部,所以我没有口音:)类型错误:Object[Object Object],[Object Object],[Object Object],[Object Object],[Object Object],[Object Object],[Object Object Object],[Object Object Object],[Object Object Object],[Object Object Object Object],[Object Object Object Object Object Object]没有“append”方法对不起,尝试用push()代替append()推送没有错误。然而,当模式关闭时,我查看TruckMmfgs下拉列表,新创建的Mfg不在那里,只有在我刷新页面时才在那里-同样,这是我不想做的事情。你能举起小提琴或弹弓吗?(不要担心服务器界面不工作,只需在控制器中硬编码一个示例truckMfg对象。我将用$timeout模拟post()调用。)标记,在将输入表单添加到主表单而不是模态上后,它立即更新了作用域,因此,模态有问题,但您的代码解决方案是合理的。-谢谢
$scope.save = function () {
$http.post('/api/TruckMfgs/', $scope.truckMfg)
.success(function () {
$scope.truckMfgs.append($scope.truckMfg);
console.log($scope.truckMfg);
})
.error(function (data) {
alert(data);
});
};