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

私はそれを解決し、それからいくつか-パートIとIIに注意してください、私は説明します:

パートI:

$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);

パートII

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

パートIでは、選択したEngineMakeと新しく作成したEngineModelを使用して、EngineMakeとEngineModelの両方へのプッシュを更新します。モーダルが送信で終了すると(新しいEngineModelを追加するため)、事前に選択されます。

しかし、ユーザーが何らかの奇妙な理由で、メインフォーム(モーダルではない)の選択で新しいEngineMakeを再選択してから、以前に選択したEngineMakeを再選択した場合はどうなりますか?

回答:ページを更新しない限り、彼は新しく作成されたEngineModelのスコープを失います。何故ですか?IIがないと、EngineMakeとEngineModelの関係を更新できませんでした。

その事故を克服するには、パートIIが必要です。

最後の仕上げ:

ステップIIでも、選択には2つの同一のEngineMakesがあり、1つは新しく作成されたEngineModelを持ち、もう1つは持たないので、実行する必要があるのは次のようなものです(つまりフィルター)。

     <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 に答える