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);
};
新的引擎模型成功添加到数据库,并放入范围。
的$ 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!我认为现在是加薪的时候了!
你在做什么错? – 2013-03-19 22:13:11