2017-06-18 8 views
0

次のタイプの角度1サービスがあります。私はgetterとsetterメソッドを作成して、異なるコントローラから変数にアクセスしようとしています。 しかし、getメソッドの変数console.logには、定義されていません。角度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; 
 
    }; 
 

 
}());

: 第1および第2のコントローラは異なる見解を持っています。 は、私が持っている最初のコントローラでは:

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

はい、しかし、私は1つのコントローラから値を設定しようとしていて、別のコントローラの値を取得しようとしています。最初のコントローラでは 'history.setWeeklyMeetingId(meeting.id);'を使い、 'vm.WeeklyMeetingID = history.getWeeklyMeetingId(); \t \t \t \t console.log( 'id、vm.WeeklyMeetingIDを取得') - ここでは定義されていません。私はサービスを注入しました。 –

+0

これは問題ありません。更新された回答をご覧ください。 –

+0

私の質問はより多くのコードで更新されました。 –

0

あなたはvm.WeeklyMeetingID = history.getWeeklyMeetingId()を実行するかどうかを確認することができます。あなたはその設定メソッドを実行した後?多分あなたはそれを設定する前に実行します。非同期呼び出しの中でsetを呼び出すと、レスポンスを取得して内部で実行することがあります。

関連する問題