2017-06-18 80 views
0

我有以下類型的角度1服務。我試圖創建getter和setter方法來訪問來自不同控制器的變量。 但是,當我console.log get方法中的變量,它是未定義的。如何在角度1服務中設置和獲取屬性

該服務是與該項目一起繼承的。我怎樣才能以這種方式創建這些方法?謝謝。

;(function(){ 
 
    angular.module("MeetingApp") 
 
     .factory('history', history); 
 

 
    history.$inject = [ '$http' ]; 
 
    
 
    function history($http){ 
 
     var historyService = { 
 
     //other methods 
 
      createHistory: createHistory 
 
     \t setWeeklyMeetingId: setWeeklyMeetingId, 
 
\t \t \t  getWeeklyMeetingId: getWeeklyMeetingId 
 
     } 
 
     
 
     function setWeeklyMeetingId(id) { 
 
\t \t \t this.weeklyMeetingId = id; 
 
\t \t } 
 

 
\t \t function getWeeklyMeetingId() { 
 
\t 
 
\t \t \t return this.weeklyMeetingId; 
 
\t \t } 
 

 
     return historyService; 
 
    }; 
 

 
}());

更新: 第一和第二控制器有不同的看法。 在第一控制器我有:

history.generateNewWeeklyMeeting(projectOrproduct) 
 
\t \t \t \t .then(meeting => { 
 
\t \t \t \t \t history.setWeeklyMeetingId(meeting.id); 
 
\t \t \t \t \t \t console.log('id',history.getWeeklyMeetingId()); //here I get the id 
 
\t \t \t \t \t return meeting; 
 
\t \t \t \t }) 
 
\t \t \t \t .then(meeting => { 
 
\t \t \t \t \t location.href = siteURL + "/new-team-meeting"; 
 
\t \t \t \t });

在第二控制器:

vm.WeeklyMeetingID = history.getWeeklyMeetingId(); 
 
console.log('get the id', history.getWeeklyMeetingId()) //Here it is undefined

回答

1

這是正確的。看到這個例子。

app = angular.module("myApp", []); 
 

 
app.controller("myCtrl", function($scope,history) { 
 
    history.setWeeklyMeetingId(10); 
 
}); 
 
app.controller("myCtrl2", function($scope,history) { 
 
    var vm = this; 
 
    vm.WeeklyMeetingID = history.getWeeklyMeetingId(); 
 
}); 
 

 
app.factory('history', history); 
 

 
history.$inject = ['$http']; 
 

 
function history($http) { 
 
    var historyService = { 
 
    setWeeklyMeetingId: setWeeklyMeetingId, 
 
    getWeeklyMeetingId: getWeeklyMeetingId 
 
    } 
 

 
    function setWeeklyMeetingId(id) { 
 
    this.weeklyMeetingId = id; 
 
    } 
 

 
    function getWeeklyMeetingId() { 
 
    return this.weeklyMeetingId; 
 
    } 
 

 
    return historyService; 
 
};
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myApp"> 
 
    <div ng-controller="myCtrl"> 
 

 

 
    </div> 
 
    <div ng-controller="myCtrl2 as vm"> 
 
    {{vm.WeeklyMeetingID}} 
 
    </div> 
 
</div>

+0

是的,但我想設置一個控制器的值,並在另一個控制器中獲取值。在第一個控制器中,我使用:'history.setWeeklyMeetingId(meeting.id);'和第二個 - 'vm.WeeklyMeetingID = history.getWeeklyMeetingId(); \t \t \t \t console.log('get the id',vm.WeeklyMeetingID)' - 這裏是未定義的。我已經注入了服務。 –

+0

沒問題。看到更新的答案。 –

+0

我用更多的代碼更新了我的問題。 –

0

你可以查看是否在運行vm.WeeklyMeetingID = history.getWeeklyMeetingId();你運行該設置方法後?也許你在設置它之前運行get。當您在異步調用中調用set時,需要一段時間才能獲得響應並在裏面運行。