无法在注册为 Angular 服务的 ES6 类中共享对象
Can't share object inside ES6 class that's registered as an Angular service
我有以下 Angular 代码,我试图在整个类中共享一些服务:
class StreamingService {
constructor($q, someService) {
this.$q = $q;
this.someService = someService;
this.getMenu = function () {
return $q(function (resolve, reject) {
someService.client.getId().load(123)
.then(function (data) {
resolve(data.menu);
}, function (err) {
reject(err);
});
});
};
}
getStreaming() {
let { $q, getMenu, someService } = this;
someService.onConnected(function () {
getMenu()
.then(function (menu) {
return menu.map(function (elem) {
if (elem.id === 'live') {
return elem.livestream[0];
}
});
});
});
}
}
StreamingService.$inject = ['$q', 'someService'];
export default angular.module('services.streaming-service', [])
.service('streamingService', StreamingService)
.name;
但是我得到一个"某些服务"没有定义。当我从 getStreaming 属性内部控制台记录"this"时,我没有获取构造函数中的元素,而是获取类的其他属性。你知道发生了什么吗?谢谢 (:
如果
可以的话,我会发表评论,因为我不确定这是答案,但我不到 50 次,所以我不能。
我对 Angular 不太熟悉,但在普通的 javascript 中,这是行不通的,因为你在构造函数中定义了你的变量是公共的。
使用 this.someService
引用某些服务,它应该可以工作(在 getStreaming()
方法中)
编辑:顺便说一下,this
可能不引用对象,对于嵌套函数,这发生在我身上。为了避免它,在构造函数中创建一个私有变量,如var self = this;
,并引用该变量以指向对象。
这对
我有用:
class StreamingService {
constructor(v) { this.v = v; }
getStreaming() { let {v} = this; console.log(v) }
}
var s = new StreamingService(5);
s.getStreaming(); //prints 5
。角度"服务"应该用new
实例化你的类,如上例所示,所以到目前为止你描述的设置似乎没有任何错误。
我会在检查器中仔细查看this
对象,因为"我没有获得构造函数中的元素,而是获取类的其他属性"似乎表明this
绑定到类(?)的原型对象。
我还会确保按预期调用您的类构造函数。
我还会在调试器中设置一个断点,以查看您的类方法是如何调用的,以及这个this
对象来自哪里。
相关文章:
- ES6构造函数返回基类的实例
- 如何在下面的ES6循环中获得前面的文本
- Facebook共享显示一个接一个的空白页面
- es6 相当于下划线查找位置
- 通过javascript/html访问twitter共享iframe
- 在我的SPA应用程序中集成Facebook共享的问题
- 如何在Javascript/ES6中的Aurelia浏览器应用程序中使用AWS S3
- 在索引.html和应用.js [node.js] 之间共享变量
- AngularJS:$q.dedefe()不能由工厂方法共享
- ES6生成器:.next()的输入值
- 简单的ES6承诺问题-交换解决和拒绝参数
- 使用闭包共享构造函数参数
- Facebook共享动态参数链接
- 映射数组ES6时考虑空值
- Node.js上的WebSocket,并在所有连接的客户端之间共享消息
- @@(“at at”)在ES6 JavaScript中是什么意思
- Javascript ES6共享类变量
- 无法在注册为 Angular 服务的 ES6 类中共享对象
- 在ES6类的函数之间共享变量
- 如何在es6中共享多个js文件中的数据