加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angular 开发微信小程序及webview不刷新问题

发布时间:2020-12-17 08:15:22 所属栏目:安全 来源:网络整理
导读:angular 开发微信小程序 webview ChangeDetectionStrategy 使用 angular/cli 创建angular 项目 略 创建一个服务封装小程序接口以方便组件调用 ng g s service/wx 将 WxService 加入到模块(app.module.ts)的 providers 中 providers: [ WxService ] 在 WxServ

angular 开发微信小程序 webview ChangeDetectionStrategy

使用 angular/cli 创建angular 项目

创建一个服务封装小程序接口以方便组件调用

ng g s service/wx
将 WxService 加入到模块(app.module.ts)的 providers 中
providers: [ WxService ]

在 WxService (wx.service.ts) 中封装小程序 APi
比如:

public getSign() {
    // 将 wx.config 转为 Observable对象
    return new Observable(sign => {
      // 获取签名数据
      this.http.get(`https://mydomain/wx/sign?url=${encodeURI(location.href.split('#')[0])}`).subscribe(r => {
        wx.config({
          // debug: true,appId: 'xxxxx',timestamp: r.timestamp,nonceStr: r.noncestr,signature: r.signature,jsApiList: ['checkJsApi','chooseImage','getLocalImgData','miniProgram']
        })
        wx.ready((res) => {
          sign.next(res)
        })
        wx.error((err) => {
          this.messageService.next({ message: err })
        })
      })
    })
  }

在组件中使用本方法

this.wxService.getSign().subscribe(r=>{
 // ...后续代码
})

其他接口均可参照此法,改造成 Observable 或 Subject,在组件中调用起来就方便多了

试图刷新问题

这时候你可能会碰到很吊诡的问题,页面有时候不能实时刷新数据,可能是小程序限制了更新频率使得 angular 不能愉快运行.

这个问题可以通过 ChangeDetectionStrategy / ChangeDetectorRef 解决

在组件装饰器中:

@Component({
    //阻止视图更新
     changeDetection: ChangeDetectionStrategy.OnPush,})

在需要数据变动后手动更新视图

constructor( 
    private cdref: ChangeDetectorRef 
 ) {}

myMethod(){
   this.wxService.getSign().subscribe(r=>{
       this.csref.markForCheck()
   })
}

也可以定时刷新试图

ngOnInit(){
    setInterval(() => {
      this.cdref.markForCheck()
    },100)
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读