如何在角度1服务中设置和获取属性

时间:2017-06-18 16:52:25

标签: javascript angularjs

我有以下类型的角度1服务。我正在尝试创建getter和setter方法以从不同的控制器访问变量。 但是当我在get方法中调试变量时,它是未定义的。

此服务随项目继承。我怎么能以这种方式创建这些方法?感谢。

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

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

		function getWeeklyMeetingId() {
	
			return this.weeklyMeetingId;
		}

        return historyService;
    };

}());

更新: 第一和第二控制器具有不同的视图。 在第一个控制器中我有:

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

在第二个控制器中:

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

2 个答案:

答案 0 :(得分: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>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

你能检查一下你是否运行vm.WeeklyMeetingID = history.getWeeklyMeetingId();运行set方法后?也许你在设置之前就跑了。当您在异步调用中调用set时,需要一些时间来获取响应并在内部运行。