监听事件

监听事件使用ev-*指令,它既可以监听原生事件,也能够监听组件事件。

监听原生事件

  1. <button ev-click={self.onClick}>点击了{self.get('count')}次</button>
  1. var App = Intact.extend({
  2. template: template,
  3. defaults: function() {
  4. return {count: 0};
  5. },
  6. onClick: function(e) {
  7. this.set('count', this.get('count') + 1);
  8. }
  9. });
  10. Intact.mount(App, document.getElementById('appevent'));

原生事件的处理函数记得bind(self),否则函数中this将会指向window

@since v2.2.0 默认会bind(self),所以无需再次bind

利用bind方法,我们可以往事件处理函数传递参数。

  1. <div>
  2. <button ev-click={self.onClick.bind(self, 1)}>赞一下</button>
  3. <button ev-click={self.onClick.bind(self, 2)}>赞两下</button>
  4. 赞{self.get('count')}
  5. </div>
  1. var App = Intact.extend({
  2. template: template,
  3. defaults: function() {
  4. return {count: 0};
  5. },
  6. onClick: function(num, e) {
  7. this.set('count', this.get('count') + num);
  8. }
  9. });
  10. Intact.mount(App, document.getElementById('appevent1'));

对于原生事件,事件对象将作为最后一个参数传递给事件处理函数。 我们可以通过它访问事件对象的属性和方法,例如,阻止事件的默认行为preventDefault(), 阻止冒泡stopPropagation()等等。

  1. <a href="/" ev-click={self.onClick}>阻止默认行为</a>
  1. var App = Intact.extend({
  2. template: template,
  3. onClick: function(e) {
  4. e.preventDefault();
  5. }
  6. });
  7. Intact.mount(App, document.getElementById('appevent2'));

监听组件事件

绑定组件暴露的事件,和原生事件一样,例如:

  1. var Component = self.Component;
  2. <div>
  3. <Component ev-increase={self.add} />
  4. 组件被点击{self.get('count')}次
  5. </div>
  1. var Component = Intact.extend({
  2. template: '<button ev-click={self.onClick}>+1</button>',
  3. onClick: function() {
  4. this.trigger('increase');
  5. }
  6. });
  7. var App = Intact.extend({
  8. template: template,
  9. defaults: {
  10. count: 0
  11. },
  12. _init: function() {
  13. this.Component = Component;
  14. },
  15. add: function() {
  16. this.set('count', this.get('count') + 1);
  17. }
  18. });
  19. Intact.mount(App, document.getElementById('appevent3'));

对于组件事件的处理函数,记得bind(self),否则处理函数的this 指向触发事件的组件实例(上例中:Component实例),而非绑定事件的实例。

@since v2.2.0 无需bind(self),默认会指向绑定事件的实例