|
|
1,实例与数据:- var app = new Vue({
- el:'#app', //document.getElementById('app')
- });
复制代码 2,生命周期
create:实例创建完成后调用,初始化数据用
mounted:挂载到实力上后会使用,一般第一个业务逻辑会从这里开始
beforeDestroy:实例销毁之前调用,主要解绑一些监听事件
- var app = new Vue({
- el:'#app',
- data: {
- a:2,
- },
- create:function () {
- //实例创建完成后调用,初始化数据用
- },
- mounted:function () {
- //挂载到实力上后会使用,一般第一个业务逻辑会从这里开始
- },
- beforeDestroy:function () {
- //实例销毁之前调用,主要解绑一些监听事件
- },
- });
复制代码
3,插值与表达式
- <div id="app">
- {{message}}
- </div>
复制代码- var app = new Vue({
- el:'#app',
- data: {
- message:'hellow word',
- },
- });
- console.log(app.message)
复制代码 直接输出html:v-html
- <span v-html="link"></span>
复制代码- data: {
- link:'<a href="#">这是一个连接</a>',
- },
复制代码 想显示{{}}标签,而不被替换 v-pre
三元运算
在{{}}插值的尾部添加管道符“|”对数据机型过滤,常用于格式化文本,格式规则是自定义的,vue实例添加选项filters来设置
- data:{
- date: new Date(),
- },
- filters: {
- formatDate: function (value) { //这里的value就是需要过滤的数据
- var date = new Date(value);
- }
- }
复制代码
过滤器串联模式,过滤器传递参数的情况
- {{message | filterA | filterB}} 过滤器串联模式
- {{message | filterA('arg1','arg2')}} 接收参数:arg1,arg2分别传给过滤器的第二个和第三个参数,因为第一个是数据本身
复制代码 事件指令: v-if
- <p v-if="seen">现在你看到我了</p>
复制代码 事件指令:v-bind:动态更新HTML元素上的属性,比如id,clas,href等- <p v-if="show">显示这段文本</p> <!--事件与指令,常用指令:v-if v-html v-pre-->
- <a v-bind:href="url">链接</a><!--v-bind:动态更新HTML元素上的属性,比如id,clas,href等-->
- <img v-bind:src="imgUrl">
复制代码- data:{
- show: true, //当值为true时 p元素将被插入,反之则会被移除
- url:'http://www.baidu.com/', imgUrl:'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',
- }
复制代码
v-on绑定事件监听 click dblclick keyup等- <button v-on:click="handleClose">点击隐藏</button>
复制代码- methods:{
- handleClose:function () {
- this.show = false;
- }
- }
复制代码
v-on绑定事件监听 简单的内联写法- <button v-on:click="show = false">点击隐藏</button>
复制代码
指令语法糖:
:等同于v-bind
@等同于v-on
- <a :href="url">链接</a> <!--:等同于v-bind-->
- <buttom @click="handleClose">点击链接变成qq</buttom><!--@等同于v-on-->
复制代码
计算属性:都以函数的形式写在Vue的实例内的computed选项内,最终返回计算后的结果- data:{
- text: "123,456"
- },
- computed:{ //所有的计算属性都以函数的形式写在Vue的实例内的computed选项内,最终返回计算后的结果
- reverseText:function () {
- return this.text.split(',').reverse().join(',');
- }
- }
复制代码
绑定class:对象语法
- <div :class="{'active' : isactive}">222</div>
- data:{
- isactive:true //类名active依赖与数据isactive
- }
复制代码
绑定class:可以传入多个属性,也可以与普通css共存
- <div class="static" :class="{'active' : isactive, 'error' : iserror}">222</div>
- data:{
- isactive:true //类名active依赖与数据isactive
- isactive:true, //类名active依赖与数据isactive
- iserror:false, //类名error依赖与数据iserror
- },
复制代码
绑定class:数组语法
- <div :class="[activecls,errorcls]">11</div>
- data:{
- activecls:'active',
- errorcls:'error'
- }
复制代码
绑定class:三元表达式根据条件切换class
- <div :class="[isactive ? activecls : '', errorcls]">11</div>
- data:{
- isactive:true,
- activecls:'active',
- errorcls:'error'
- }
复制代码
内置指令 v-cloak是解决初始化慢到时页面闪动的最佳实践
- <style>
- [v-cloak] {
- display: none;
- }
- </style>
- <div id="app" v-cloak> <!--v-cloak不需要表达式,他会在vue实例结束编译时从绑定的html元素上一出,经常和css的display none 一起使用-->
- {{message}}
- </div>
复制代码
内置指令v-once 只渲染一次 不随数据的变化重新渲染 将被视为静态内容
- <div id="app" v-once> <!--内置指令v-once 只渲染一次 不随数据的变化重新渲染 将被视为静态内容-->
- <span v-once>{{message}}</span>
- <div v-once>
- <span>{{message}}</span>
- </div>
- </div>
复制代码
条件渲染内置指令:v-if v-else-if v-else 判断单个元素时
- <div id="app" v-once> <!--条件渲染内置指令:v-if v-else-if v-else 判断单个元素时-->
- <p v-if="status === 1">当status为1时显示该行</p>
- <p v-else-if="status === 2">当status为2时显示该行</p>
- <p v-else>否则显示该行</p>
- </div>
- data:{
- message:'这是一段文本'
- status:3
- }
复制代码
如果一次判断是多个元素 可以在内置的template元素上用条件指令
- <div id="app" v-once> <!--如果一次判断是多个元素 可以再内置的template元素上用条件指令-->
- <template v-if="status === 1">
- <p>这是一段文本</p>
- <p>这是一段文本</p>
- <p>这是一段文本</p>
- </template>
- </div>
- data:{
- status:3
- status:1
- }
复制代码
v-show 和 v-if 使用方法一致,但是v-show是改变元素的css属性display,当v-show 结果为false时,元素会隐藏
- <p v-show="status === 1">当status 为1时显示该行</p>
复制代码 列表渲染指令 v-for
- <ul>
- <li v-for="book in books">{{book.name}}</li>
- </ul>
- data:{
- books : [
- {name:'《vue.js》实战'},
- {name:'《JavaScript语言精粹》'},
- {name:'《JavaScript 高级程序设计》'},
- ]
- }
复制代码
v-for 遍历对象属性时,有两个可选参数,分别是键名和索引
- <li v-for="(value, key, index) in user">
- {{index}} - {{key}} - {{value}}
- </li>
- data:{
- user :
- {
- name:'Aresn',
- gender:'男',
- age:26,
- }
- }
复制代码
v-for 还可以迭代整数
- <span v-for="number in 10">{{ number }} </span>
复制代码
Vue常用数组方法
- /*
- * js 数组方法:https://www.w3school.com.cn/jsref/jsref_obj_array.asp*/
- /*
- * Vue包含了一组观察数组编译的方法,使用他们改变数组也会出发视图更新
- * push //将新元素添加到数组的末尾,并返回新的长度。
- * pop //删除数组的最后一个元素,并返回该元素。
- * shift //删除数组的第一个元素,并返回该元素。
- * unshift //将新元素添加到数组的开头,并返回新的长度。
- * sort //对数组的元素进行排序。
- * reverse //反转数组中元素的顺序。
- * */
- /*
- * 有些数组方法不会改变原数组
- * filter //使用数组中通过测试的每个元素创建新数组。
- * concat //连接两个或多个数组,并返回已连接数组的副本。
- * slice //选择数组的一部分,并返回新数组。
- * */
复制代码
表单v-model基本用法- <input type="text" v-model="message" placeholder="输入...">
- data: {
- message:'',
- }
复制代码
实时更新数据绑定可以用@input
- <input type="text" @input="handleInput" placeholder="输入...">
- <p>输入的内容是:{{message}}</p>
- methods: {
- handleInput: function (e) {
- this.message = e.target.value; //event.target返回触发事件的元素
- }
- }
复制代码
单选按钮在单数使用是不需要v-model,直接使用v-bind绑定一个布尔类型的值
- <input type="radio" :checked="picked">
- data: {
- picked:false,
- }
复制代码
如果是组合使用来实现互斥选择的效果,就需要v-model配合value来使用
- <input type="radio" v-model="picked" value="html">
- <input type="radio" v-model="picked" value="js" id="js">
- <input type="radio" v-model="picked" value="css" id="css">
- <p>选的项是:{{picked}}</p>
- data: {
- picked:false,
- picked:'js',
- }
复制代码
复选框
- <input type="checkbox" v-model="checked" id="checked">
- <lable for="checked">选择状态:{{checked}}</lable>
- data: {
- checked:true,
- }
复制代码
复选框组合:v-model与value一起,多个勾选框都绑定到同一个数组类型的数据,value的值在数组当中
- <input type="checkbox" v-model="checked" value="html" id="html">
- <input type="checkbox" v-model="checked" value="js" id="js">
- <input type="checkbox" v-model="checked" value="css" id="css">
- <p>选择的项是:{{checked}}</p>
- data: {
- checked:['html', 'css'],
- }
复制代码
select选择列表 ption是备选项,如果含有value属性,v-model就会优先匹配value值;如果没有,就直接匹配option的text
- <select v-model="selected">
- <option>html</option>
- <option value="js">JavaScript</option>
- <option>css</option>
- </select>
- <p>选择的项是:{{selected}}</p>
- data: {
- checked:['html', 'css'],
- selected:'css'
- }
复制代码
给select添加属性 multiple就可以多选了,此时v-modle绑定的是一个数组,与复选框用法类似
- <select v-model="selected" multiple>
- <option>html</option>
- <option value="js">JavaScript</option>
- <option>css</option>
- </select>
- data: {
- selected:'css',
- selected:['html','js'],
- }
复制代码
在业务中,option经常用v-for动态输出,value和text也是用v-bind来动态输出的
- <select v-model="selected">
- <option
- v-for="option in options"
- :value="option.value">{{option.text}}</option>
- </select>
- <p>选择的项是:{{selected}}</p>
- data: {
- selected:'html',
- options:[
- {
- text:'HTML',
- value:'html',
- },
- {
- text:'JavaScript',
- value:'js',
- },
- {
- text:'CSS',
- value:'css',
- },
- ]
- },
复制代码
|
|