0

我的 API 资源很好,我可以获得一个类的所有内容并填充任何内容,但出于演示目的,这里是与 EngineMakes 相关的 API 资源:

            // EngineMake
            GetEngineMakes: { method: 'GET', params: { controller: 'EngineMakes' }, isArray: true },
            GetEngineMake: { method: 'GET', params: { controller: 'EngineMakes' } },
            AddEngineMake: { method: 'POST', params: { controller: 'EngineMakes' } },
            UpdateEngineMake: { method: 'PUT', params: { controller: 'EngineMakes' } },
            DeleteEngineMake: { method: 'DELETE', params: { controller: 'EngineMakes' } },

我有一个模态表单,允许用户(1)选择一个引擎品牌,然后(2)添加一个新的引擎模型。我可以将新引擎模型推向范围,但它与相应的引擎制造无关。

这是我的代码:

// in engine model controller:

$scope.save = function(data) {
    var engineModel = angular.copy($scope.engineModel);
    $http.post('/api/EngineModels/', engineModel)
        .success(function () {
            $rootScope.addEngineModel(engineModel);
        })
        .error(function(data) {
            alert(data);
        });
};

// in engine make controller
$rootScope.addEngineModel = function (engineModel) {

the problem --->   $scope.engineMake = API.GetEngineMake({ id: engineModel.FK_EngineMakeId});      

    $scope.engineMake.EngineModels = $scope.engineMake.EngineModels || [];
    $scope.engineMake.EngineModels.push(engineModel);
};
  1. 新引擎模型已成功添加到数据库并放入范围。

  2. $rootScope.addEngineModel 确实被命中,参数正确且 FK_EngineMakeID 正确。**

但是,我对 API 的调用显然是不正确的,因为我从未点击 API 控制器来找到与引擎模型 FK_EngineMakeID 匹配的 EngineMake,因此我可以将新的引擎模型推送到相应的 EngineMake.EngineModels,所以当模式关闭并且用户选择引擎品牌,新创建的引擎模型是该集合的一部分。

有谁知道我哪里出错了?

PS:如果有人可以告诉我如何使用简单的 $http.Get,我会很高兴并放弃 API 资源

4

1 回答 1

0

我解决了它,然后一些 - 请注意第一部分和第二部分,我将解释:

第一部分:

$rootScope.addEngineModel = function (engineModel) {
    var tmp = $http({ method: 'GET', url: '/api/EngineMakes/' + engineModel.FK_EngineMakeId }).
              success(function (data, status, headers, config) {
                  $scope.engineMake = angular.copy(data);
                  $scope.engineMakes.push($scope.engineMake);
              }).
              error(function (data, status, headers, config) {
                  console.log('fail');
              });

    $scope.engineMake.EngineModels = $scope.engineMake.EngineModels || [];
    $scope.engineMake.EngineModels.push(engineModel);

第二部分

    var tmp2 = function () {
        API.UpdateEngineMake({ id: $scope.engineMake.Id }, $scope.engineMake, function (res) {
            if (res.Id > 0) {
                alert('success');
            }
        });
    };
};

第一部分将使用选定的 EngineMake 和新创建的 EngineModel 更新对 EngineMake 和 EngineModel 的推送,因为一旦模态随提交关闭(以添加新的 EngineModel)。

但是,如果用户出于某种奇怪的原因,在主窗体(而不是模态)的选择中重新选择了一个新的 EngineMake,然后重新选择了他之前选择的 EngineMake,该怎么办?

答:除非他刷新页面,否则他将失去新创建的 EngineModel 的范围。这是为什么?因为没有II,我未能更新EngineMake与EngineModel的关系。

你需要第二部分来克服这个不幸。

最后一点:

即使使用第二步,选择中也会有 2 个相同的 EngineMake,一个会有新创建的 EngineModel,一个没有,所以你需要做的是这样的事情(即过滤器):

     <select id="engineMake" ng-model="engineMake" ng-options="engineMake.Name for engineMake in engineMakes | unique">
      <option value="" selected>Select Engine Manufacturer ..</option>  
     </select>

哦!我觉得是时候加薪了!

于 2013-03-19T22:09:06.860 回答