# 插值 {#interpolation} 插值是Regular最常用特性,包括 - [文本插值](#text) - 针对文本节点 - [属性插值](#attr) - 针对DOM节点 - [参数插值](#prop) - 针对声明式组件 - [Fragment参数](#fragment) - 片段参数 他们语法都是类似,即`{Expression}`,`{}`也称为表达式容器。 __参考__ > 其他场景也可以使用表达式,具体参考[表达式使用场景](../reference/expression.md#case) ##文本插值 {#text} - 举例: `
{username}
` 针对文本插值,Regular 会创建一个 textNode, 并建立表达式到`textContent`的 __单向数据绑定__ __Example__ ```js const app = new Regular({ template: "
{username}
", data: {username: 'leeluolee'} }); app.$inject('#app'); ``` 上面的例子会输出`
leeluolee
`,并且一旦数据发生改变,文本节点内容也会发生改变 >由于是单向绑定,你直接修改textContent是无法反向映射到数据的,而且会导致单向绑定失效 ## 属性插值 {#attr} 举例: `
haha
` 针对属性插值,Regular 会创建一个对应名称的属性节点,并创建表达式到 __属性值__ 的单向绑定。 __几个注意点__ 1. 如果文本内部具有插值符号`{}`, Regular 会解释成组合表达式,如`'.modal-{klass} z-{state}'` 就相当于是 `'.modal-' + klass + 'z-' + state`。 2. 对于非指令类的的属性, Regular 会在值变化时, 修改对应属性, 即一般属性(`class`, `style`,`title`等)是天生可插值的。 3. 对于指令类的属性, Regular 会将具体处理逻辑交由[指令](./directive.html)处理。 4. 由于是单向绑定,你通过 DOM API 修改属性值是无法反向映射到数据的,而且会导致单向绑定失效 __Example__ ```javascript ``` 上述几个属性结果如下 1. `r-model`: 参考[内置指令](./directive.html#r-model) 2. `style`: 字符串组合插值, 等价于 `"left: " + value + "px"` 3. `class`: 简单属性插值 4. `type`: 简单属性赋值,没有绑定 {%raw%} __FAQ__ - Regular中,class不是关键字,你可以直接使用 - 部分接受对象类型的指令如 [r-style](directive.md#r-style),请注意`r-style={'left': '10px'}` 是错误的赋值,因为`'left': '10px'`不是合法表达式,`{{'left': '10px'}}`才是正确的写法 {%endraw%} ## 参数插值 {#prop} - 举例: `` 通过参数插值传入组件数据,并创建外层组件字段(如上例 `blog.title` )到内部组件字段(如上例 `title`)的 __双向绑定__ 注意如果[表达式不是setable](../reference/expression.md#setable)的(如 `title={blog.title + ':' + blog.subTitle}`), 将只会创建外层组件到内层组件的 __单向绑定__ 关于参数插值,请直接看[组件章节](./component#prop) ### Fragment片段参数 {#fragment} Regular还支持一种模板片段的插值,称为,它与组件结构的复用能力直接相关,如 ```html 我是标题 } > 我是内容区 ``` 更多解读请直接参考[组合 - 结构复用](../advanced/composite.md#fragment)