认识Vue.js的组件和模板
2017-10-20 00:00
573 查看
摘要: 指令是Vue.js中一个重要的特性,
主要提供了一种机制将数据的变化映射为DOM行为。
那什么交数据的变化映射为DOM行为,
Vue.js是通过数据驱动的,
所以我们不会直接去修改DOM结构,
不会出现类似$('ul').append('<li>one</li>')这样的操作,
当数据变化时,指令会一句设定好的操作对DOM进行修改,
这样就可以只关注数据的变化,
而不用去管理DOM的变化和状态,
即元素属性实际的值是有vm实例中的data属性提供的。
例如:
v-bind可以简写为“:”,
上述例子可以简写为<span :cotomId="id">
实现效果如下:
昨天我们也用过,我们简写一下看一下效果
效果如下:
作用为更新innerHTML,
接受的字符串不会进行编译等操作,
按普通HTML处理
代码如下
实现效果如下
更多内置指令请查询官网:Vue.js指令
插值
文本:使用“Mustache”语法(双大括号){{value}}
作用:替换实例上的属性值,
当值改变时,插值内容就会自动更新
原生的html:双大括号输出的是文本,不会解析html
属性:使用v-bind进行绑定,可以响应变化
使用JavaScript表达式:可以写简单的表达式
template选项对象的属性
模板将会替换挂在元素。挂在元素的内容都将被忽略。
代码如下
有木有发现什么惊奇的变化
根节点只能有一个
将html结构写在一对script标签中,设置type="X-template"
实现效果如下:
写在script标签中,还是比较局限,
如果别的文件也是这个结构的时候,
这个就不能重复使用。
render 选项对象的属性
createElement(标签名,{数据对象},[子元素]);
子元素为文本或者数组
我们还是来一段代码演示
实现效果如下
关于数据对象属性,讲情请参考官网的例子。
Vue.js官网
主要提供了一种机制将数据的变化映射为DOM行为。
那什么交数据的变化映射为DOM行为,
Vue.js是通过数据驱动的,
所以我们不会直接去修改DOM结构,
不会出现类似$('ul').append('<li>one</li>')这样的操作,
当数据变化时,指令会一句设定好的操作对DOM进行修改,
这样就可以只关注数据的变化,
而不用去管理DOM的变化和状态,
Vue的内置指令
1. v-bind
v-bind主要用于绑定DOM元素属性(attribute),即元素属性实际的值是有vm实例中的data属性提供的。
例如:
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue的指令</title> <script src="../vue.js"></script> </head> <body> <!-- HTML模版 --> <div id="demo"> <span v-bind:cutomId="id">{{message}}</span> </div> <script> //数据 let obj ={ message:"Hello World", id:'123' }; //声明式渲染 var vm = new Vue({ el:'#demo', data:obj }); </script> </body> </html>
v-bind可以简写为“:”,
上述例子可以简写为<span :cotomId="id">
实现效果如下:
2. v-on
绑定事件监听器,简写为@。昨天我们也用过,我们简写一下看一下效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue的指令</title> <script src="../vue.js"></script> </head> <body> <!-- HTML模版 --> <div id="demo"> <span @click="clickHandle">{{message}}</span> </div> <script> //数据 let obj = { message:"hello Vue" }; //声明式渲染 var vm = new Vue({ el:"#demo", data:obj, methods:{ clickHandle(){ alert("click") } } }); </script> </body> </html>
效果如下:
3.v-html
v-html,参数类型为string,作用为更新innerHTML,
接受的字符串不会进行编译等操作,
按普通HTML处理
代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Vue的指令</title> <script src="../vue.js"></script> </head> <body> <!-- HTML模版 --> <div id="demo" v-html="HTML"></div> <script> //数据 let obj = { HTML:"<div>Hello World</div>" }; var vm = new Vue({ el:"#demo", data:obj }) </script> </body> </html>
实现效果如下
更多内置指令请查询官网:Vue.js指令
模板
html模板
基于DOM的模板,模板都是可解析有效的html插值
文本:使用“Mustache”语法(双大括号){{value}}
作用:替换实例上的属性值,
当值改变时,插值内容就会自动更新
原生的html:双大括号输出的是文本,不会解析html
属性:使用v-bind进行绑定,可以响应变化
使用JavaScript表达式:可以写简单的表达式
字符串模板
template字符串template选项对象的属性
模板将会替换挂在元素。挂在元素的内容都将被忽略。
代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>template模板</title> <script src="../vue.js"></script> </head> <body> <!--HTML模板--> <div id="demo"></div> <script> //数据 let obj = { html:"<div>String</div>", abc:1 }; var str = "<div>Hello</div>"; var vm = new Vue({ el:"#demo", data:obj, template:str }) </script> </body> </html>
有木有发现什么惊奇的变化
根节点只能有一个
将html结构写在一对script标签中,设置type="X-template"
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>template模板</title> <script src="../vue.js"></script> </head> <body> <!--HTML模板--> <div id="demo"> <span>vue</span> </div> <script type="x-template" id="temp"> <div> Hello,{{abc}}, <span>sunday</span> </div> </script> <script> //数据 let obj = { html:"<div>String</div>", abc:1 }; var vm = new Vue({ el:"#demo", data:obj, template:"#temp" }); </script> </body> </html>
实现效果如下:
写在script标签中,还是比较局限,
如果别的文件也是这个结构的时候,
这个就不能重复使用。
模板render函数
render函数render 选项对象的属性
createElement(标签名,{数据对象},[子元素]);
子元素为文本或者数组
我们还是来一段代码演示
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>render函数</title> <script src="../vue.js"></script> <style type="text/css"> .bg{ background: #ee0000; } </style> </head> <body> <div id="demo"></div> <script> //数据 let obj = { }; var vm = new Vue({ el:"#demo", data:obj, render(createElement){ return createElement( //元素名 "ul", //数据对象 { class:{ bg:true } }, //子元素 [ createElement("li",1), createElement("li",2), createElement("li",3) ] ); } }) </script> </body> </html>
实现效果如下
关于数据对象属性,讲情请参考官网的例子。
Vue.js官网
相关文章推荐
- Vue.js、vue安装步骤、单文件组件、模板指令
- Vue.js 中,7种定义组件模板的方法
- Vue.js 定义组件模板的七种方式
- Vue.js 中,7种定义组件模板的方法
- Vue.js 中,7种定义组件模板的方法
- vuejs 组件的认识
- Vue.js 中,7种定义组件模板的方法 | Codementor
- 【17】vue.js — 组件(模板)
- 一个简单的Vue.js组件开发示例
- Vue.js的全局/局部组件填坑记
- vuejs组件交互 - 03 - vuex状态管理实现组件交互
- 前端框架vue.js系列(7):父子组件参数变化传递规范
- Vue.js动态组件解析
- Vue.js中兄弟组件之间互相传值
- Vuejs(15)——Vue的异步组件
- Vue.js组件——slot杂记
- Vue.js 系列教程 2:组件,Props,Slots
- Vue.js仿微信聊天窗口展示组件功能
- vue.js 实现评价五角星组件的实例代码
- vue.js表格组件开发的实例详解