呈现一个实体对象的DOM结构,这个DOM有个自定义属性是需要动态赋值的,比如说 item.data 要绑到自定义属性 data 上;你可能会这么写: data="{{item.data}}" ,但直接用插值语法会报错的。

  这里有个方案:自定义一个指令:“data”专门接收“item.data”数据,然后在指令内部做操作,将data数据绑上去。

  示例如下:

@Directive({
selector: '[data]',
inputs: ['data']
})
export class DataDirective {
private data; constructor(private el: ElementRef; private render: Renderer) { } ngOnChanges() {
this.render.setElementAttribute(this.el.nativeElement, 'data', this.data);
}
}

  指令渲染出来后会被加上Angular2特有的前缀,所以得在指令里重新补上data属性。用Onchanges生命钩子监听data的变化,有变动时,更新值。

  注意:传给该指令的值不能是对象,onchanges无法监听对象内部属性的变化。

  如果你按上面的做法去做确实达到了目的,只是这么做实在太繁琐了。其实Angular2有给属性做绑定的语法: [attr.属性名]=属性值 。

  正确的示例如下:

<div [attr.data]="data">{{data}}</div>

  style、class也有类似的语法: [style.样式名]=样式值 、 [class.样式类名]=true/false 。

Angular2-给属性做双向绑定的更多相关文章

  1. [WPF源码分析]ContentControl依赖项属性的双向绑定,two-way binding view's DependencyProperty and ViewModel's variable

    问题:自定义控件的依赖项属性和VIewModel中的变量不能双向绑定 解决思路:对比.net源码 PresentationFramework  /   System.Windows.Controls ...

  2. 007-ant design 对象属性赋值,双向绑定

    1.state对象属性赋值 设对象为 state={ datavalue:{ id:'', name:'', }, } 修改对象属性为: SetName=(e)=>{ let val=e.tar ...

  3. vue中使用 contenteditable 制作输入框并使用v-model做双向绑定

    <template> <div class="div-input" :class="value.length > 0 ? 'placeholder ...

  4. rxswift的双向绑定

    将值域与控件域一同提升为rx的monand域,然后进行绑定. 类型提升. 在之前的文章样例中,所有的绑定都是单向的.但有时候我们需要实现双向绑定.比如将控件的某个属性值与 ViewModel里的某个  ...

  5. angular2 自定义双向绑定属性

    import { Component, OnInit, Output, Input, EventEmitter } from '@angular/core'; @Component({ selecto ...

  6. 如何在Vue2中实现组件props双向绑定

    Vue学习笔记-3 前言 Vue 2.x相比较Vue 1.x而言,升级变化除了实现了Virtual-Dom以外,给使用者最大不适就是移除的组件的props的双向绑定功能. 以往在Vue1.x中利用pr ...

  7. 如何在原生微信小程序中实现数据双向绑定

    官网:https://qiu8310.github.io/minapp/ 作者:Mora 在原生小程序开发中,数据流是单向的,无法双向绑定,但是要实现双向绑定的功能还是蛮简单的! 下文要讲的是小程序框 ...

  8. vue 双向绑定(v-model 双向绑定、.sync 双向绑定、.sync 传对象)

    1. v-model实现自定义组件双向绑定 v-model其实是个语法糖,如果没按照相应的规范定义组件,直接写v-model是不会生效的.再说一遍,类似于v-on:click可以简写成@click,v ...

  9. angularjs深入理解向指令传递数据,双向绑定机制

    <!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ...

随机推荐

  1. linux 配置msyql

    下面记录了如何在ubuntu16.04上安装mysql5.7的方法. sudo apt install mysql-server 安装时会让你输入mysql root用户的密码,并确认密码 sudo ...

  2. k8s rc

    RC是用来管理Pod的,每个RC由一个或多个Pod组成:在RC被创建之后,系统将会保持RC中的可用Pod的个数与创建RC时定义的Pod个数一致,如果Pod个数小于定义的个数,RC会启动新的Pod,反之 ...

  3. https经过ngxin在web服务器收到http请求

    一. 问题描述: nginx代理nexus的时候页面不全,部分https地址自动转成http了,使用方案四解决的 浏览器输入https://www.mysite.com,后台通过request.get ...

  4. 如何让Syncthing始终使用同一个设备ID?

    设备ID(device id)是Syncthing最重要的参数之一,所有节点的发现.连接等操作,全部是基于这个设备ID!对于已经建立起来的P2P网络,保持重要节点的设备ID唯一性是非常重要的!!!!那 ...

  5. 内置函数enumerate()使用

    描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. Python 2.3. 以上版本可用,2. ...

  6. 【扫盲】HTML5、Web APP、3G网站、Wap网站傻傻分不清楚

           移动互联网指手机网站和app,其中app分为native app(原生app),web app(html5开发),Hybrid app(前两种app结合):手机网站分为wap网站和3g网 ...

  7. SpringMvc拦截器运行原理。

    首先,先简单的说一下怎么配置SpringMvc的拦截器. 分两步,第一步先定义一个类,实现HandlerInterceptor接口. import javax.servlet.http.HttpSer ...

  8. 异步 JavaScript - 事件循环

    简评:如果你对 JavaScript 异步的原理感兴趣,这里有一篇不错的介绍. JavaScript 同步代码是如果工作的 在介绍 JavaScript 异步执行之前先来了解一下, JavaScrip ...

  9. ui7

    2016.9讲义 一.课程的主要内容和目的 二.课程所用工具软件——Photoshop CS6 1. Photoshop 的发展史 1990.2,ps1.0问世,1991.2,PS2.0发行,此后,进 ...

  10. 九省联考 2018 Day 1 复现

    前言 今年省选还有 15 天.每天针对性刷题学知识点有点枯燥,想到真题还没刷,就对着 pdf 做了一遍. A. 一双木棋 去年省选得了 25,应该是 \(n=2,m=2\) 的贪心和 \(m=1\) ...