【问题标题】:how to write custom directive with two way binding without ngModel in Angular2如何在Angular2中使用没有ngModel的两种方式编写自定义指令
【发布时间】:2016-07-23 02:31:25
【问题描述】:

在angular2中,如何编写自定义指令与双向绑定,我不想使用naModel进行数据绑定。

目前,我想实现一个功能,当鼠标进入或离开一个div时,指令也会修改绑定对象。以下是我的代码:

指令:

import { Directive, HostListener, Input } from '@angular/core';
@Directive({
  selector: '[rowHover]'
})
export class HoverDirective {

  @Input('rowHover') hover: boolean;
  @HostListener('mouseenter') onMouseEnter() {
    this.hover = true;
  }
  @HostListener('mouseleave') onMouseLeave() {
    this.hover = false;
  }
}

组件:

import {Component} from "@angular/core";
import {PairRowComponent} from './pair-row.component';
import {HoverDirective} from '../directives/pair-hover.directive';

@Component({
  selector: "pairs-result",
  templateUrl: "./app/pairs/components/pairs.html",
  directives: [PairRowComponent, HoverDirective]
})
export class PairsComponent {
  public showDetail: boolean = false;
}

HTML

<ul class="search-list">
    <li [(rowHover)]="showDetail">{{showDetail}}<pair-row></pair-row></li>
  </ul>

我想在鼠标进入或离开 li 标签时更改 showDetail 的值。

非常感谢!

【问题讨论】:

    标签: angular angular2-directives


    【解决方案1】:

    您可以将showDetail 设为对象而不是boolean,然后更改该对象的属性。请注意,您甚至不需要将属性标记为输出(()s):

    @Component({
      selector: "pairs-result",
      template: `
      <ul class="search-list">
        <li [rowHover]="showDetail">{{showDetail.value}}<pair-row></pair-row></li>
      </ul>
      `,  // ^^^^^^^^-- no need of (rowHover)   ^^^^^^^^--- .value added here as well
      directives: [HoverDirective]
    })
    export class PairsComponent {
      public showDetail: any = {value: false};   // property is now an object instead of a bool
    }
    

    指令:

    @Directive({
      selector: '[rowHover]'
    })
    export class HoverDirective {
      @Input('rowHover') hover: any;
      @HostListener('mouseenter') onMouseEnter() {
        this.hover.value = true;                       // <-- notice the .value here
      }
      @HostListener('mouseleave') onMouseLeave() {
        this.hover.value = false;                       // <-- notice the .value here
      }
    }
    

    检查demo plunker here。

    【讨论】:

    • 哇!有用! angular2的例子不多!非常感谢!
    猜你喜欢
    • 2019-01-22
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2014-07-22
    • 2014-05-03
    相关资源
    最近更新 更多