0

这是我的表单的选择控件:

<select ng-model="truckMfg.truckMfgs" ng-options="truckMfg.Name for truckMfg in truckMfgs">
   <option value="" selected>Select Truck Manufacturer ..</option>  
</select>

我有一个模式,允许用户添加尚未在表中的 Mfg。这是我的控制器:

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);
};

}

我要完成的工作:

用户添加新制造商并且模式关闭后,我希望将选择控件更新为新的制造商列表。addtl mfg 正在添加到表中,但它没有出现在选择控件中。刷新表单将显示新数据,但这当然不是我想要的。

有任何想法吗?

马克·拉科克

我感谢您的帮助。我试过了,但没有用:

$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);
        });
};

尊敬的,你能告诉我你推荐的代码吗?谢谢

(PS:查看了你的个人资料,我也喝咖啡,把我的女儿带到了mawl,但不是在Nork):)

4

1 回答 1

1

我认为不需要在 save() 中调用 GetTruckMfgs(),因为您已经拥有需要添加到 truckMfgs 列表中的数据。所以相反,让 save() 添加/追加$scope.truckMfg$scope.truckMfgs. 这样您就可以避免再次访问服务器。

如果您想在更新选择列表之前确保数据已成功发布,您可以在 success() 回调中执行此操作。如果您希望您的 UI 更新得更快(即响应更快),您可以在保存函数中的 post() 调用之前(或之后)执行此操作,然后在错误回调中处理任何错误(例如,删除项目如果 post() 失败,则从选择列表中)。

于 2013-03-02T22:01:45.217 回答