AngularJs - API控制器不会被调用

问题描述:

我的API资源都很好,我可以得到所有的一类和填充任何东西,但对于演示目的这里的API资源,因为它们涉及到EngineMakes:AngularJs - 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,因此,当模式关闭并且用户选择引擎make时,新创建的引擎模型是该集合的一部分。

有没有人看到我要去哪里错了?

PS:我很乐意用一个简单的$ http.Get,并放弃了API资源,如果有人可以告诉我怎么

我解决它,然后一些 - 注和第二部分,我来解释一下:

第一部分:

$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个相同EngineMakes,一个将新创建的EngineModel,一个不会,所以你需要做的是一样的东西这个(即过滤器):

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

Oy!我认为现在是加薪的时候了!

+0

你在做什么错? – 2013-03-19 22:13:11