我的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);
};
新引擎模型已成功添加到数据库并放入范围。
$ rootScope.addEngineModel确实被点击,参数正确且FK_EngineMakeID正确。**
但是,我对API的调用显然是不正确的,因为我从未点击API控制器来查找与引擎模型FK_EngineMakeID 匹配的EngineMake,因此我可以将新引擎模型推送到相应的EngineMake.EngineModels ,所以当模态关闭并且用户选择引擎make时,新创建的引擎模型是该集合的一部分。
有谁知道我哪里出错了?
PS:我对一个简单的$ http.Get感到满意,如果有人能告诉我如何,我会放弃API资源答案 0 :(得分: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更新对EngineMake和EngineModel的推送,并在模态因提交结束后预先选择新创建的EngineModel(添加新的EngineModel)。
但是,如果用户出于某些奇怪的原因,在选择主窗体(而不是模态)中重新选择新的EngineMake,然后重新选择之前选择的EngineMake会怎么样?
答案:他失去了新创建的EngineModel的范围,除非他刷新页面。 这是为什么?因为没有II,我无法更新EngineMake与EngineModel的关系。
你需要第二部分才能克服这一不幸事件。
最后一点:
即使使用第二步,选择中也会有两个相同的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公司!我认为现在是加薪的时候了!