Javascript 在 AngularJS 服务中显示模块模式不工作
Javascript Revealing Module Pattern in AngularJS Service not working
我在 angularJS 服务中使用以下代码来完成一些任务:
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(artistIds){
artistIds = artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
//setArtistIds : setArtistIds,
artistIds : artistIds
}
});
这个工厂被另一个工厂使用 notifications.js 其中我正在尝试设置
promiseFactory.artistIds = [1,2,3];
在某些 ajax 调用上,但它不起作用,当我在我的 promiseFactory 的任何函数中使用 artistIds 变量时,结果是空白数组 [](初始值)。为什么?
好的,其次,当我使用一个名为 setArtistIds 的函数来实现同样的事情时,这个东西就起作用了,但即使那样我也必须做类似
的事情
function setArtistIds(i){ // Right
artistIds = i;
}
但是当我这样做的时候不是这样:
function setArtistIds(artistIds){ // Wrong
artistIds = artistIds;
}
谁能解释一下我做错了什么。
当你执行这行代码时:
promiseFactory.artistIds = [1,2,3];
您只是在更改 属性 工厂返回的对象。
但是你所有的方法甚至都没有使用它,它们在闭包中使用变量 artistIds
。
为了修复此错误,请将 getter 和 setter 添加到您的工厂。
- 当您以与闭包变量相同的方式命名 setter 函数的参数时,您就是在隐藏它。这就是它不起作用的原因。
再给它一个名字就可以了。
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(newArtistIds){
artistIds = newArtistIds;
}
function getArtistIds(){
return artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
setArtistIds : setArtistIds,
getArtistIds : getArtistIds,
}
});
我在 angularJS 服务中使用以下代码来完成一些任务:
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(artistIds){
artistIds = artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
//setArtistIds : setArtistIds,
artistIds : artistIds
}
});
这个工厂被另一个工厂使用 notifications.js 其中我正在尝试设置
promiseFactory.artistIds = [1,2,3];
在某些 ajax 调用上,但它不起作用,当我在我的 promiseFactory 的任何函数中使用 artistIds 变量时,结果是空白数组 [](初始值)。为什么?
好的,其次,当我使用一个名为 setArtistIds 的函数来实现同样的事情时,这个东西就起作用了,但即使那样我也必须做类似
的事情function setArtistIds(i){ // Right
artistIds = i;
}
但是当我这样做的时候不是这样:
function setArtistIds(artistIds){ // Wrong
artistIds = artistIds;
}
谁能解释一下我做错了什么。
当你执行这行代码时:
promiseFactory.artistIds = [1,2,3];
您只是在更改 属性 工厂返回的对象。
但是你所有的方法甚至都没有使用它,它们在闭包中使用变量 artistIds
。
为了修复此错误,请将 getter 和 setter 添加到您的工厂。
- 当您以与闭包变量相同的方式命名 setter 函数的参数时,您就是在隐藏它。这就是它不起作用的原因。
再给它一个名字就可以了。
angular.factory('promiseFactory', function(){
var artistIds = [];
function setArtistIds(newArtistIds){
artistIds = newArtistIds;
}
function getArtistIds(){
return artistIds;
}
return {
createPromiseForNotification: promiseFactory,
getNotis: getNotis,
setNotis : setNotis,
setArtistIds : setArtistIds,
getArtistIds : getArtistIds,
}
});