2016-07-25 4 views
0

に追加することが私の最初のモジュールです:各項目について:「1297 CARのID」または何コントローラからIDをつかみ、ここでは別のコントローラのAPI呼び出し

angular.module('ngApp', []) 
.factory('authInterceptor', authInterceptor) 
.constant('API', 'http://myserver.com/ecar/api') 
.controller('task', taskData) 

function taskData($scope, $http, API) { 
    $http.get(API + '/tasks'). 
    success(function(data) { 
    $scope.mainTask = data; 
    console.log(data); 
    }); 
} 

これは、キーが含まれているJSON配列を返します。アレイ。私はそのIDをつかんで何らかの形で変数に格納し、別のコントローラで呼び出す必要があります。理由は、この車がマイナーな情報で表示されたときに、「詳細を表示」をクリックすると、そのIDに基づいて車の詳細をすべて表示する別のページが開きます。

たぶん、このような何か:私はちょうどあなたのように(JSONが送信する「taskData」機能から「CAR ID」を取得し、「carDetails」機能のAPI呼び出しにそれを追加する必要があり

angular.module('ngApp', []) 
.factory('authInterceptor', authInterceptor) 
.constant('API', 'http://myserver.com/ecar/api') 
.controller('task', taskData) 
.controller('carDetails', carDetails) 

function taskData($scope, $http, API) { 
    $http.get(API + '/tasks'). 
    success(function(data) { 
    $scope.mainTask = data; 
    console.log(data); 
    }); 
} 

function carDetails($scope, $http, API) { 
    $http.get(API + '/car/$id'). 
    success(function(data) { 
    $scope.mainTask = data; 
    console.log(data); 
    }); 
} 

上記を参照)。だから私は明らかに2番目の関数に渡すために変数($ idなど)を作成する必要がありますが、私はどのようにわかりません。

誰でも手伝ってもらえますか?

答えて

0

- 作品ここInserting JSON ID key into ng-click directive and then pass that into another controller

されたスクリプトを:

angular.module('ngApp').value('carValue', { id: '' }); 

は、その後、あなたのコントローラ(複数可)にその値を注入:

ngular.module('ngApp', []) 
.service('CarDetailService', CarDetailService) 
.controller('task', taskData) 
.controller('carDetails', carDetails); 

CarDetailService.$inject = ['$http', 'API']; 
function CarDetailService($http, API) { 
    var CarDetailService = this; 
    CarDetailService.setCar = function(carId) { 
    CarDetailService.carId = carId; 
    }; 

    CarDetailService.getCar = function() { 
    return $http.get(API + "/car/" + CarDetailService.carId); 
    }; 
} 

taskData.$inject = ['$scope', '$http', 'API', 'CarDetailService']; 
function taskData($scope, $http, API, CarDetailService) { 
    $http.get(API + '/tasks'). 
    success(function(data) { 
    $scope.mainTask = data; 
    console.log(data); 
    }); 

    $scope.selectCar = function(carId) { 
    CarDetailService.setCar(carId); 
    $location.url('/car-details-route'); //go to details page 
    }; 
} 

carDetails.$inject = ['$scope', 'CarDetailService']; 
function carDetails($scope, CarDetailService) { 
    CarDetailService.getCar().success(function(details) { 
    $scope.details = details; 
    }); 
} 
0

角度サービスを使用して、2つのコントローラ間でデータを共有できます。

angular.module('ngApp', []) 
.factory('authInterceptor', authInterceptor) 
.constant('API', 'http://myserver.com/ecar/api') 
.controller('task', taskData) 
.service('carService', carService) 
.controller('carDetails', carDetails) 

function taskData($scope, $http, API, carService) { 
    $http.get(API + '/tasks'). 
    success(function(data) { 
    $scope.mainTask = data; 
    console.log(data); 
    }); 
    // Put a click listener for Car, suppose it takes in the id as the parameter 
    $scope.carClickListener = function(data) { 
     carService.setSelectedCarId(data); 
    } 
} 

// Use to service to store the selected Car Id 
function carService() { 
    var selectedCarId = ""; 
    this.setSelectedCarId = function(id) { 
     selectedCarId = id; 
    } 
    this.getSelectedCarId = function() { 
     return selectedCarId; 
    } 
} 
function carDetails($scope, $http, API) { 
    $http.get(API + '/car/$id'). 
    success(function(data) { 
    $scope.mainTask = data; 
    console.log(data); 
    }); 
} 
0

単純なvalueを使用してこれを行うことができます。まず作成value:このこの記事に基づいて作業を手に入れた

function taskData($scope, $http, API, carValue) { 
    [...] 
    carValue.id = 'someValue'; <-- set this however you need to 
    [...] 
} 

function carDetails($scope, $http, API, carValue) { 
    $http.get(API + '/car/' + carValue.id) 
     .success(function(data) { 
      $scope.mainTask = data; 
      console.log(data); 
     }); 
} 
関連する問題