小编Sky*_*ler的帖子

模块模式中 get/set 和 Object.defineProperty 的区别

我已经看到了在模块模式中实现 getter/setter 的两种不同方法。一个使用“defineProperty”,而另一个则不使用。一种与另一种相比有哪些优点/缺点?

var MyModule = (function() {

  var _val;

  var api = {
    get value1() {
      return _val
    },
    set value1(value) {
      _val = value
    }
  };

  Object.defineProperty(api, 'value2', {
    get: function() {
      return _val;
    },
    set: function(value) {
      _val = value
    }
  });
  return api;

}());
Run Code Online (Sandbox Code Playgroud)

https://plnkr.co/edit/TbJSD4noZTew8II83eTH?p=preview

javascript module-pattern

6
推荐指数
1
解决办法
1724
查看次数

rxjs 相当于 Array.some() 吗?

如果您想迭代数组以查看某些元素是否通过条件,请执行以下操作:

let result = [1, 34, 65, 3, 7].some(entry => entry > 10)
// result => true
Run Code Online (Sandbox Code Playgroud)

执行此操作的 rxjs 等效项是什么?我想象它是这样的(这并不完全正确):

// functions return Observable<number>
from([fn1, fn2, fn2]).pipe(
  map(fn => fn()),
  takeUntil(data > 100)
).subscribe(data => console.log(`result:${data}`)
Run Code Online (Sandbox Code Playgroud)

(fn 的返回值始终是异步的)

rxjs

4
推荐指数
1
解决办法
3727
查看次数

如何将点击处理程序附加到预计的内容元素

我正在使用内容投影将按钮放入组件中。

<hello name="{{ name }}">
  <button #btn>Click Me</button>
</hello>
Run Code Online (Sandbox Code Playgroud)

和组件:

@Component({
  selector: 'hello',
  template: `
  <h3>Hello {{name}}!</h3>
  <ng-content></ng-content>
  `
})
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利……但是我现在想向该按钮添加一个(单击)事件侦听器,并且希望处理程序位于接收计划内容的组件中。

我希望执行以下操作以访问本机元素,然后添加单击侦听器。

@ViewChild('btn') btn
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我在ngAfterViewInit中控制台记录this.btn时,我得到了“未定义”。即使它确实起作用,我认为与访问本机元素相比,附加侦听器必须有更多角度的方法。

做到这一点的最佳方法是什么?

stackblitz示例:https ://stackblitz.com/edit/angular-cj4bz1 ? file = src%2Fapp%2Fhello.component.ts

ng-template viewchild angular

3
推荐指数
1
解决办法
685
查看次数