我创建了一个公共服务来在控制器之间共享数据。
以下是代码段。
这里使用setter和getter时未定义。在直接访问对象时获取值。如何使用getter和setter获取值。
幕后发生的事情。
// JavaScript source code
(function () {
'use strict';
angular.module('app',[])
})();
(function () {
'use strict';
angular
.module('app')
.factory('appcontext', appContext);
function appContext() {
var service = {
getStartDate: getStartDate,
setStartTime : setStartTime,
startTime : startTime
};
return service;
//private variables
var startTime = '';
function setStartTime(startTime) {
startTime = startTime;
}
function getStartDate() {
return startTime;
}
}
})();
(function () {
'use strict';
angular.module('app')
.controller("InsController", InsController)
InsController.$inject = ['appcontext'];
function InsController(appcontext) {
appcontext.setStartTime(new Date());
console.log(appcontext.getStartDate()); // undefined
appcontext.startTime = new Date();
console.log(appcontext.startTime); //prints the date correctly
}
})();

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-App="app">
<div ng-controller= "InsController">
<div>{{ }}</div>
</div>
</html>
&#13;
答案 0 :(得分:0)
只需返回您要公开的功能。既然你有getter和setter函数,那么不要自己返回变量,这对你的帮助不大。创建一个变量service
,它存储您需要的所有内部内容,并且您的函数应该使用它。
// JavaScript source code
(function () {
'use strict';
angular.module('app',[])
})();
(function () {
'use strict';
angular
.module('app')
.factory('appcontext', appContext);
function appContext() {
var service = this;
return {
getStartDate: getStartDate,
setStartTime : setStartTime
};
//private variables
service.startTime = '';
function setStartTime(startTime) {
service.startTime = startTime;
}
function getStartDate() {
return service.startTime;
}
}
})();
(function () {
'use strict';
angular.module('app')
.controller("InsController", InsController)
InsController.$inject = ['appcontext'];
function InsController(appcontext) {
appcontext.setStartTime(new Date());
console.log(appcontext.getStartDate()); // undefined
}
})();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-App="app">
<div ng-controller= "InsController">
<div>{{ }}</div>
</div>
</html>
&#13;
答案 1 :(得分:0)
您需要消除startTime变量,并将引用作为service.startTime。您已在服务上为其创建了一个属性,但其余代码引用了var而不是属性。
function setStartTime(startTime) {
service.startTime = startTime;
}
function getStartDate() {
return service.startTime;
}
不确定这是否是您的所有代码,但看起来StartDate的一些用途也应该是StartTime。
答案 2 :(得分:0)
我的这篇博文可能会对您有所帮助:
答案 3 :(得分:0)
您的代码没有任何问题。如果我只是替换您的setStartTime
方法参数名称,那只是导致冲突的命名约定。一切都运作良好。
// JavaScript source code
(function () {
'use strict';
angular.module('app',[])
})();
(function () {
'use strict';
angular
.module('app')
.factory('appcontext', appContext);
function appContext() {
var service = {
getStartDate: getStartDate,
setStartTime : setStartTime,
startTime : startTime
};
return service;
var startTime = '';
function setStartTime(newStartTime) {
startTime = newStartTime;
}
function getStartDate() {
return startTime;
}
}
})();
(function () {
'use strict';
angular.module('app')
.controller("InsController", InsController)
InsController.$inject = ['appcontext'];
function InsController(appcontext) {
appcontext.setStartTime(new Date());
console.log(appcontext.getStartDate());
appcontext.startTime = new Date();
console.log(appcontext.startTime); //prints the date correctly
}
})();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-App="app">
<div ng-controller= "InsController">
<div>{{ }}</div>
</div>
</html>
&#13;