2015-07-03 73 views
0

我有2個控制器類似如下:通過Angular中的服務在2個控制器之間傳遞一個var?

.controller('DashCtrl', function($scope, GCs, GCDetails) { 
    $scope.getData = function(id) 
    { 
     GCs.get(id) 
     .success(function(data){ 
      console.log(data); // it is getting the data correctly here. 

      // I want to pass the data to 'GCDetailCtrl' controller 
      GCDetails = data; 
     }); 
    }; 
}) 

.controller('GCDetailCtrl', function($scope, GCs) { 
    console.log(GCDetails); // I am getting an empty object 
    $scope.itemDetails = GCDetails; //nothing in it 
}) 

我試過很多方法,看到計算器很多線程,但我想不出是什麼問題。

我的服務是這樣的:

.service('GCDetails', function() { 
    return {}; 
}); 

我覺得我的服務是錯誤的,因爲我總是返回一個空的對象。請幫忙嗎?謝謝。

回答

0

你並沒有使用服務的價值。您需要在服務中存儲ajax響應,然後在另一個控制器中調用它。做下面的方式

.controller('DashCtrl', function($scope, GCs, GCDetails) { 
    $scope.getData = function(id) 
    { 
     GCs.get(id) 
     .then(function(data){ 
      console.log(data); // it is getting the data correctly here. 

      // I want to pass the data to 'GCDetailCtrl' controller 
      GCDetails.myObject = data; // assign data in service's object 
     }); 
    }; 
}) 

而且你的服務應該是

.service('GCDetails', function() { 
    this.myObject = {}; 
    var self = this; 
    this.callAFunction = function() { 
     return self.myObject ; 
    }; 
}); 

並使用您要爲低於此服務的對象

.controller('GCDetailCtrl', function($scope, GCs, GCDetails) { 
    $scope.itemDetails = GCDetails.callAFunction(); 
    console.log($scope.itemDetails); //You will get the data 
}) 
+0

我這是給我一個語法錯誤在服務 – Riad

+0

檢查編輯答案 – Vineet

+0

我得到一個空對象{} – Riad

0

您的服務必須先設置對象,前您嘗試獲取更新的對象。

所以它應該是這個樣子

.service('GCDetails', function(){ 
    var self = this; 
    self.myObject = {}; 

    self.setObject = function (val) { 
    self.myObject = val; 
    }; 

    self.getObject = function() { 
    return self.myObject; 
    }; 
}); 

爲什麼我指定這個自我?爲了避免碰撞,當你調用getObject或者setObject時,它不知道你在調用哪個對象。

+0

它沒有工作 – Riad

+0

我沒有改變我的控制器中的任何東西。我只是改變了服務,因爲你建議 – Riad

+0

我不知道你在做什麼,但這裏是工作小提琴http://jsfiddle.net/cjs5nu3o/1/ – debuggerpk

0

這不是一個很好的做法,使從控制器的HTTP調用。您可以通過您的http調用使服務返回一個函數。我的建議是:

app.factory('GCdetails', function($http){ 
    return { 
     data:{}, 
     setData:function(data){ 
      this.data=data; 
     }, 
     get : function(params){ 
      return $http.get(id, { 
       params : params 
      }); 
     } 
    } 
}); 

而且現在從控制器更新數據:

app.controller('DashCtrl',function($scope,GCdetails){ 
    GCdetails.get().success(function(data){ 
     GCdetails.setData(data); 
    }); 
}); 

app.controller('GCdetailsController',function($scope,GCdetails){ 
    $scope.itemDetails=GCdetails.data; 
}); 

我希望這有助於。

0

這應該工作,是我一直使用的服務是傳遞數據:

.service('GCDetails', function() { 

    var myObj = {}; 

    this.setObject = function (val) { 
    myObj = val; 
    }; 

    this.getObject = function() { 
    return myObj; 
    }; 
}); 

而且在你的控制器確保您從您的控制器調用GCDetails.setObject(yourvalue)因此它實際上有一個值,當你調用GCDetails.getObject()

+0

我會試試.. – Riad

+0

@Riad Make在嘗試獲取數據之前,確定你確實從控制器設置了一個值。 – Chrillewoodz

相關問題