Javascript 闪电组件及;window.addEventListener()

Javascript 闪电组件及;window.addEventListener(),javascript,salesforce,salesforce-lightning,Javascript,Salesforce,Salesforce Lightning,我试图检测设备何时改变其方向,并更新我的组件以反映新的方向 我的方法的问题是,我的事件存在于组件生命周期之外,这反过来使组件变量未定义,从而使事件中的代码完全无用 任何对我能做些什么来实现这一目标有一些见解的人都会很好 afterRender: function(component,helper){ this.superAfterRender(); window.addEventListener("orientationchange", function() {

我试图检测设备何时改变其方向,并更新我的组件以反映新的方向

我的方法的问题是,我的事件存在于组件生命周期之外,这反过来使组件变量未定义,从而使事件中的代码完全无用

任何对我能做些什么来实现这一目标有一些见解的人都会很好

afterRender: function(component,helper){
    this.superAfterRender();
    window.addEventListener("orientationchange", function() {
        window.setTimeout(function(){
            if(window.innerWidth <= 768) {
                component.set('v.deviceWidth','small');
            } else if(window.innerWidth > 768 && window.innerWidth < 1440) {
                component.set('v.deviceWidth','medium');
            } else if(window.innerWidth >= 1440) {
                component.set('v.deviceWidth','large');
            }
        },500);
    });
}
afterRender:函数(组件、助手){
this.superAfterRender();
addEventListener(“方向更改”,函数(){
setTimeout(函数(){
如果(window.innerWidth 768&&window.innerWidth<1440){
组件集('v.deviceWidth','medium');
}否则如果(window.innerWidth>=1440){
set('v.deviceWidth','large');
}
},500);
});
}
适合您的好解决方案:

示例如下:

只需创建主题,然后:

const sub = new Rx.Subject();
window.addEventListener("orientationchange", function() {
  sub.next(window.innerWidth)
});
在组件中:

sub.subscribe((value)=>{
 if(value <= 768) {
   c.set('v.deviceWidth','small');
 } else if(value > 768 && value < 1440) {
   c.set('v.deviceWidth','medium');
 } else if(value >= 1440) {
   c.set('v.deviceWidth','large');
 }
})
sub.subscribe((值)=>{
如果(值768&&value<1440){
c、 设置('v.deviceWidth','medium');
}否则如果(值>=1440){
c、 设置('v.deviceWidth','large');
}
})
并且不要忘记在组件将被销毁时取消订阅