Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Regular 能不能实现angular中的async类似的功能 #222

Open
Qquanwei opened this issue Aug 30, 2018 · 13 comments
Open

Regular 能不能实现angular中的async类似的功能 #222

Qquanwei opened this issue Aug 30, 2018 · 13 comments

Comments

@Qquanwei
Copy link

Angular中的async操作可以在模板中直接使用RxJS
https://blog.thoughtram.io/angular/2017/02/27/three-things-you-didnt-know-about-the-async-pipe.html

Regular中利用filter或其他是否也可以实现呢?

@leeluolee
Copy link
Member

要换个语法, 除非针对 async 做特殊处理,或另外抽象一个asyncFilter之类的统一逻辑 。 现在filter都是同步的。

@Qquanwei
Copy link
Author

期待进一步消息 👍

@leeluolee
Copy link
Member

reopen吧,是个好建议。 其实zone也可以引入,就是code base 会很大

@Qquanwei
Copy link
Author

现在Regular模板字符串里的函数执行作用域很隐式,导致无法很好地传递模板字符串(例如一些配置插入项) 这种有什么好的解决方案吗?

@leeluolee
Copy link
Member

给个Example吧, JSX 思维 用在MVVM 框架里 会掉坑里

@Qquanwei
Copy link
Author

Qquanwei commented Aug 30, 2018

一个模板传递多层的例子。

基础组件A

Regular.extend({
  template: '{#include this.data.configFragment}'
})

组件B, 基于A的封装

Regular.extend({
  template: '<A  configFragment={this.data.configFragment}/>'
})

组件C, 实际业务组件,使用组件B

Regular.extend({
  template: '<B configFragment={this.data.fragment}/>',

  data: {
     // 这里的作用域就变了,变成B的了, 但是B没有clickButton
     fragment: '<button on-Click={this.clickButton}/>'
  },

  clickButton() {
  }
})

@leeluolee
Copy link
Member

leeluolee commented Aug 30, 2018

http://regularjs.github.io/guide/advanced/composite.html 参考这里, 算FAQ了。 用Fragment

@Qquanwei
Copy link
Author

意思是使用继承代替手动组合? 我想这种传递有没有一个手动的方式绑定模板作用域,例如C组件里的fragment直接是: compile(this, '<button on-Click={}></button>') 而不是依靠Regular自己推导执行上下文

@leeluolee
Copy link
Member

leeluolee commented Aug 30, 2018

Fragment是 声明在哪里, 上下文就在哪。是一致的。 还是组合啊,从不推荐什么继承。

@Qquanwei
Copy link
Author

https://codepen.io/Qquanwei/pen/RYoVGN?editors=1011

感觉并不能这样用, 是我使用姿势不对 ?

@leeluolee
Copy link
Member

leeluolee commented Aug 30, 2018

建议把文档先看到最后,说了前因后果了。

你例子 改成这样 https://codepen.io/leeluolee/pen/yxVbdQ?editors=1011

const C = Regular.extend({
  template: '<B configFragment={~<button on-click={this.onClickButton()}>click me</button>}/>',
 
   onClickButton() {
     console.log('click button')
   }
})

当然你也可以用 this.$body , 它也是一个Fragment内容

<B>xxxxxxxx<B>

B内部使用的地方

configFragment={this.$body}

@Qquanwei
Copy link
Author

之前是因为有个模板字符串是在配置文件里,不在组件里定义。这样写好像没问题

@leeluolee
Copy link
Member

姿势很有问题啊, 表达式里 { this.data.xx } 都可以简写成 {xx}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants