2013-03-19 96 views
0

我的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資源,如果有人可以告訴我怎麼

回答

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個相同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