在AngularJS服务中显示模块模式的Javascript不起作用
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
}
});
这个工厂是在另一个工厂通知。js中使用的,其中我试图设置
promiseFactory.artistIds = [1,2,3];
在一些ajax调用,但它不工作,当我使用的artistIds变量在我的promise工厂的任何函数,它原来是空白数组[](初始值)。为什么?
好的,其次,当我使用一个名为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,
}
});
相关文章:
- Javascript,访问一个主要对象模块模式中的每个对象
- 我是否可以检测到javascript正在被卸载(作为调试模式)
- 包含圆括号的JavaScript Regex模式
- 用于操纵DOM API的Javascript设计模式
- 用javascript创建一个看起来正常分布的模式
- 揭示模块模式(JavaScript) - 这无法访问私有方法
- 匹配每个字符,直到在行首出现模式(JavaScript)
- 用于处理成功、失败、重试的异步请求的设计模式?(JavaScript)
- 模块模式javascript不是函数
- 从自定义模块模式Javascript库调用XMLHttpRequest时不会发生任何事情
- 浏览器中的观察者模式javascript:订阅事件"添加了Dom元素“;并处理这个元素
- IE11在Iframe下的怪癖模式-javascript错误
- 返回具有链接模式javascript的项
- 命令模式 JavaScript 中的执行函数
- gsp下拉值返回NaN在IE7文档模式(javascript)
- 动态模式Javascript
- 保持服务器时间,即使在离线模式(javascript/html5)
- 我如何专业地构建我的模块模式Javascript项目
- 怪癖模式 - JavaScript 不会更新表单选择选项
- 设计模式- JavaScript.安全提取深层(可能不存在)对象属性的通用函数