• vue样式操作与事件绑定


    Vue笔记

    1 Vue实例 (VM)

    var vm = new Vue({
       el:'#app', //挂载元素
       
       //数据
       data: {
           title:'值',
           ....
           dataList:[]
      },
       
       //方法
       methods: {
      方法名: function(){
       
    },
            ...
    },
           
       //计算属性
       computed: {
           属性名: function(){
          return
      }  
      }
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>computed</title>
     6 </head>
     7 <body>
     8     <div id="app">
     9         <div>
    10             姓:<input type="text" v-model='first_name' />
    11         </div>
    12         <div>
    13             名:<input type="text" v-model='last_name' />
    14         </div>
    15         <!-- <p>姓名:{{ full_name() }}</p> -->
    16         <!-- 采用计算方式的变量可以不在data中赋初值 -->
    17         <p>姓名:{{ full_name }}</p>
    18     </div>
    19 </body>
    20 <script type="text/javascript" src="js/vue.js"></script>
    21 <script type="text/javascript">
    22     var app = new Vue({
    23         el: '#app',
    24         data: {
    25             first_name: '',
    26             last_name: ''
    27         },
    28         // methods: {
    29         //     full_name: function () {
    30         //         return this.first_name + " " + this.last_name;
    31         //     }
    32         // },
    33         // 一个变量依赖于多个变量,一般对该变量采用计算处理
    34         computed: {
    35             full_name: function () {
    36                 return this.first_name + " " + this.last_name;
    37             }
    38         }
    39     })
    40 </script>
    41 
    42 </html>
    computed

       
       //监听属性
       watch: {
      属性名: function(){
     
    }
    }
           
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>computed</title>
     6 </head>
     7 <body>
     8     <div id="app">
     9         <div>
    10             姓名:<input type="text" v-model='full_name' placeholder="姓与名以空格隔开" />
    11         </div>
    12         <p>姓:{{ first_name }}</p>
    13         <p>名:{{ last_name }}</p>
    14     </div>
    15 </body>
    16 <script type="text/javascript" src="js/vue.js"></script>
    17 <script type="text/javascript">
    18     var app = new Vue({
    19         el: '#app',
    20         data: {
    21             full_name: '',
    22             first_name: '',
    23             last_name: ''
    24         },
    25         watch: {
    26             full_name: function () {
    27                 // 监听full_name,然后拆分为姓与名
    28                 var fname = this.full_name;
    29                 var arr = fname.split(' ');
    30                 this.first_name = arr[0];
    31                 this.last_name = arr[1];
    32             }
    33         }
    34     })
    35 </script>
    36 
    37 </html>
    watch
      // delimiters

     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>delimiters</title>
     6 </head>
     7 <body>
     8     <div id="app">
     9         {{ msg }} [[ msg ]] ${ msg }
    10     </div> 
    11 </body>
    12 <script type="text/javascript" src="js/vue.js"></script>
    13 <script type="text/javascript">
    14     var app = new Vue({
    15         el: '#app',
    16         data: {
    17             msg: '数据'
    18         },
    19         // delimiters配置自定义绑定符号
    20         // 值为拥有两个元素的数组,元素为字符串形式
    21         delimiters: ['${', '}']
    22     })
    23 </script>
    24 
    25 </html>
    delimiters

       //钩子方法
       //数据创建成功 data methods computed watch
       //在这里从服务器获取数据
       created: function(){
     
    },
       //vue实例 已经挂载到元素上
       // dom操作 在这里
       mounted: function(){
             
      }
       
    })
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>生命周期钩子</title>
     6 </head>
     7 <body>
     8     <div id="app">
     9         {{ msg }}
    10     </div> 
    11 </body>
    12 <script type="text/javascript" src="js/vue.js"></script>
    13 <script type="text/javascript">
    14     var app = new Vue({
    15         el: '#app',
    16         data: {
    17             msg: '数据'
    18         },
    19         // 该钩子方法触发:vue实例刚被创建(只拥有内存位置),其他任何操作都未执行
    20         // 就满足的beforeCreate钩子的触发条件,系统就会回调该方法的实现
    21         // 用户在该触发条件情况下想去完成某些逻辑,那么就去实现该钩子
    22         beforeCreate: function () {
    23             
    24         },
    25         /*
    26         // 系统内部调用
    27         if (beforeCreate) {
    28             beforeCreate()
    29         }
    30         // ...
    31         // ...
    32         if (created) {
    33             created()
    34         }
    35         if (beforeMount) {
    36             beforeMount()
    37         }
    38         // ...
    39         */
    40 
    41         // 数据与事件加载完毕,el并没有进行挂载
    42         created: function () {
    43             // 获取想要的数据(请求后台)
    44             // 事件的解绑或换绑或重新绑定
    45             // 对虚拟DOM进行修改
    46         },
    47         // DOM树加载完毕,el渲染完毕
    48         mounted:function () {
    49             // 可能需要对DOM进行操作(交给模块处理)
    50         }
    51     })
    52 </script>
    53 
    54 </html>
    生命周期钩子
     
    数据驱动   
    Vue.set() 或者 vm.$set()

    vue实例 的对象
    vm.$data
    vm.$el
    vm.$watch()
    Vue.set(数组, 索引, 新值)
    Vue.set(对象, 属性, 新值)

    2 Vue视图 (V) 模板

    2.1 插值

    {{  }}
    <p v-text=""></p>
    <p v-once>{{}}p>
    <p v-html=""></p>

    防止闪烁 v-cloak
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>视图</title>
     6     <style type="text/css">
     7         p {
     8             border: 1px solid #ff6700;
     9             height: 30px;
    10             line-height: 30px;
    11         }
    12         .abc {
    13             border-color: yellowgreen;
    14         }
    15         [class] {
    16             border-width: 5px;
    17         }
    18 
    19         [v-cloak] {
    20             display: none;
    21         }
    22     </style>
    23     <script type="text/javascript" src="js/vue.js"></script>
    24 </head>
    25 <body>
    26     <!-- <div id="app" v-cloak> -->
    27     <div id="app">
    28         <!-- v-model实现数据的双向绑定 -->
    29         <input type="text" v-model='msg'>
    30         <input type="text" v-model='msg'>
    31         <p>{{ msg }}</p>
    32         <p v-text='msg'></p>
    33         <!-- 只赋值一次 -->
    34         <p v-once>{{ msg }}</p>
    35         <!-- 可以解析html语法的标签 -->
    36         <p v-html='msg'></p>
    37 
    38         <!-- 属性的绑定:属性值有变量控制 v-bind:属性名 :属性名 -->
    39         <!-- <p class="active"></p> -->
    40         <!-- <p v-bind:class='active'></p> -->
    41         <p :class='active'></p>
    42 
    43         <!-- 事件的绑定:事件值为函数名(带或不带参数列表) v-on:事件名 @事件名 -->
    44         <p @dblclick='func'></p>
    45 
    46     </div>
    47 </body>
    48 <script type="text/javascript">
    49     var app = new Vue({
    50         el: '#app',
    51         data: {
    52             msg: '初值',
    53             active: 'abc'
    54         },
    55         methods: {
    56             func: function () {
    57                 alert('呵呵')
    58             }
    59         }
    60     })
    61 </script>
    62 </html>
    vue视图相关操作

    2.2 绑定属性

    v-bind:属性=值
    :属性=值
    v-model="" 用于表单控件 双向数据绑定
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>主要指令v-bind</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7     <style type="text/css">
     8         .a {
     9             background-color: red;
    10         }
    11         .b {
    12             color: green;
    13         }
    14     </style>
    15 </head>
    16 <body>
    17     <div id="app">
    18         <!-- v-bind:绑定系统预定义属性 -->
    19         <!-- 字符串abc -->
    20         <p title="abc">p段落</p>
    21         <!-- 1、变量abc,需要初始化 -->
    22         <p v-bind:title="abc">p段落</p>
    23         <!-- 2、如何直接将abc作为字符串绑定到属性 -->
    24         <p v-bind:title="'abc'">p段落</p>
    25         <!-- 3、v-bind简写为: -->
    26         <p :title="'ABC'">p段落</p>
    27 
    28         <!-- 4、绑定多个变量 -->
    29 
    30         <!-- i:以数组形式进行赋值 -->
    31         <!-- a, b为两个变量 -->
    32         <!-- 变量值可以有data提供 -->
    33         <!-- <div :class="[a, b]">12345</div> -->
    34     
    35         <!-- ii:以对象形式进行赋值 -->
    36         <!-- a,b为两个class值 -->
    37         <!-- class值只取true | false -->
    38         <!-- 非空均视为true,否则视为false -->
    39         <!-- <div :class="{a: 'A', b: 'B'}">67890</div> -->
    40         <!-- <div :class="{a: true, b: true}">67890</div> -->
    41 
    42         <!-- iii -->
    43         <div :class="[{a: true}, {b: true}]">呵呵嘻嘻哈哈</div>
    44 
    45         <!-- 总结 -->
    46         <!-- [], 中出现的值,作为变量,变量值来源于data,且最终将来源于data的数据作为属性值赋值给v-bind绑定的属性 -->
    47         <!-- {}, 中出现的键(key),直接作为v-bind绑定的属性的值,而键(key)对应的值(value)是决定键是否起效,值(value)的取值只为true|false -->
    48 
    49         <a :style="color" href="">百度</a>
    50         <a :style="{color: 'red', backgroundColor: 'black'}" href="">京东</a>
    51     </div>
    52 </body>
    53 <script type="text/javascript">
    54     new Vue({
    55         el: '#app',
    56         data: {
    57             abc: 'ABC',
    58             a: 'a',
    59             b: 'b',
    60             // color: 'color: red'
    61             color: {
    62                 color: 'red',
    63                 // 支持驼峰命名法
    64                 backgroundColor: 'orange'
    65             }
    66         }
    67     })
    68 </script>
    69 </html>
    vue指令之v-bind
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>主要指令v-model</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7     <style type="text/css">
     8         
     9     </style>
    10 </head>
    11 <body>
    12     <div id="app">
    13         <!-- v-model针对于表单元素 -->
    14 
    15         <form action="" method="get">
    16             <!-- 1、双向绑定:服务于文本输入框 -->
    17             <!-- v-model存储的值为输入框的value值 -->
    18             <div>
    19                 <input type="text" name="usr" v-model="in_val">
    20                 <input type="password" name="ps" v-model="in_val" >
    21                 <textarea name="info" v-model="in_val"></textarea>
    22             </div>
    23             
    24             <!-- 2、单选框 -->
    25             <div>
    26                 <!-- 单选框是以name进行分组,同组中只能发生单选 -->
    27                 <!-- v-model存储的值为单选框的value值 -->
    28                 男:<input type="radio" name="sex" value="男" v-model="ra_val">
    29                 女:<input type="radio" name="sex" value="女" v-model="ra_val">
    30                 {{ ra_val }}
    31             </div>
    32 
    33             <!-- 3、单一复选框 -->
    34             <!-- v-model存储的值为true|false -->
    35             <!-- 或者为自定义替换的值 -->
    36             <div>
    37                 <input type="checkbox" v-model='sin_val' true-value="选中" false-value="未选中" />
    38                 {{ sin_val }}
    39             </div>
    40             
    41             <!-- 4、多复选框 -->
    42             <!-- v-model存储的值为存储值多复选框value的数组 -->
    43             <div>
    44                 <input type="checkbox" value="喜好男的" name="cless" v-model='more_val' />
    45                 <input type="checkbox" value="喜好女的" name="cless" v-model='more_val' />
    46                 <input type="checkbox" value="不挑" name="cless" v-model='more_val' />
    47                 {{ more_val }}
    48             </div>
    49 
    50             <input type="submit">
    51         </form>
    52 
    53     </div>
    54 </body>
    55 <script type="text/javascript">
    56     new Vue({
    57         el: '#app',
    58         data: {
    59             in_val: '',
    60             // 默认值可以决定单选框默认选项
    61             ra_val: '',
    62             // 默认值为true,单一复选框为选中,反之false为不选中
    63             sin_val: '',
    64             // 数组中存在的值对应的复选框默认为选中状态
    65             more_val: ['喜好女的','不挑']
    66         }
    67     })
    68 </script>
    69 </html>
    vue指令之v-model

    2.3 指令

    v-bind
    v-on
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>主要指令v-on</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7     <style type="text/css">
     8         
     9     </style>
    10 </head>
    11 <body>
    12     <div id="app">
    13         <!-- 1、绑定系统预定义事件,事件值为函数 -->
    14         <div v-on:click="fn1">{{ msg }}</div>
    15         <!-- 2、v-on简写 -->
    16         <div @click="fn2">{{ msg }}</div>
    17         <!-- 3、传值 -- 默认传值 -- 事件 event -->
    18         <div @click='fn3'>{{ msg }}</div>
    19         <!-- 4、传值 -- 自定义值 -->
    20         <div @click="fn4(msg, 88888)">{{ msg }}</div>
    21         <!-- 5、传参 -- 自定义值 + 事件 -->
    22         <div @click="fn5($event, msg)">{{ msg }}</div>
    23     </div>
    24 </body>
    25 <script type="text/javascript">
    26     new Vue({
    27         el: '#app',
    28         data: {
    29             msg: '默认值'
    30         },
    31         methods: {
    32             fn1: function () {
    33                 alert('呵呵')
    34             },
    35             fn2 () {
    36                 alert('嘻嘻')
    37             },
    38             fn3 (obj) {
    39                 console.log(obj)
    40             },
    41             fn4 (obj, num) {
    42                 console.log(obj, num)
    43                 console.log(this.msg)
    44             },
    45             fn5 (ev, msg) {
    46                 console.log(ev, msg)
    47             }
    48         }
    49     })
    50 </script>
    51 </html>
    vue指令之v-on

    v-cloak
    v-for
    v-if
    v-else
    v-else-if
    v-show
    v-text
    v-html
    v-once
    v-model
    v-pre

    2.4 条件渲染

    v-if="表达式"  表达式的返回值是boolean
    v-else
    v-else-if
    提高效率: 使用 key="唯一值" v-bind:key=""


    v-show="布尔值"
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>条件渲染</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7     <style type="text/css">
     8         .box {
     9             width: 200px;
    10             height: 200px;
    11             background-color: red;
    12             border-radius: 50%;
    13         }
    14         .bb {
    15             width: 50px;
    16             height: 50px;
    17             border: 1px solid black;
    18             border-radius: 50%;
    19             font: 400 20px/50px 'STSong';
    20             text-align: center;
    21             user-select: none;
    22             float: left;
    23             margin-left: 20px;
    24         }
    25         .wrap:after {
    26             content: '';
    27             display: block;
    28             clear: both;
    29         }
    30         .a {
    31             width: 300px;
    32             height: 200px;
    33         }
    34         .r {background: red}
    35         .g {background: green}
    36         .b {background: blue}
    37     </style>
    38 </head>
    39 <body>
    40     <div id="app">
    41         <button @click="btnClick">切换</button>
    42         <!-- 1、v-if取值为true|false -->
    43         <!-- true将会被渲染|false不会被渲染(页面中不存在该标签) -->
    44         <!-- <div class="box" v-if="isShow"></div> -->
    45 
    46         <!-- 2、v-show取值为true|false -->
    47         <!-- true为渲染并显示,false虽然渲染到DOM上,但display以none形式存在 -->
    48         <div class="box" v-show='false'></div>
    49         
    50         <!-- 3、v-if、v-else-if、v-else -->
    51         <!-- 多分支条件 -->
    52         <div class="wrap">
    53             <!-- .bb.b$*3 -->
    54             <div class="bb b1" @click='changeColor(0)'></div>
    55             <div class="bb b2" @click='changeColor(1)'>绿</div>
    56             <div class="bb b3" @click='changeColor(2)'></div>
    57         </div>
    58         <div>
    59             <!-- 多分支一定存在判断,判断便会产生比较变量 -->
    60             <div class="r a" v-if='tag == 0'></div>
    61             <div class="g a" v-else-if='tag == 1'></div>
    62             <div class="b a" v-else></div>
    63         </div>
    64     </div>
    65 </body>
    66 <script type="text/javascript">
    67     new Vue({
    68         el: '#app',
    69         data: {
    70             isShow: false,
    71             tag: 0
    72         },
    73         methods: {
    74             // 通过方法控制绑定给v-if的值
    75             btnClick: function () {
    76                 this.isShow = !this.isShow;
    77             },
    78             changeColor (num) {
    79                 this.tag = num;
    80             }
    81         }
    82     })
    83 </script>
    84 </html>
    条件渲染

    2.5 v-for 列表渲染

    v-for   通常都需要指定 key 保证唯一值

    <p v-for="item in itemList">
    <p v-for="(item,index) in itemList">
    <p v-for="(val,key) in obj">
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>列表渲染</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7 </head>
     8 <body>
     9     <div id="app">
    10         <ul>
    11             <li>{{list[0]}}</li>
    12             <li>{{list[1]}}</li>
    13             <li>{{list[2]}}</li>
    14             <li>{{list[3]}}</li>
    15             <li>{{list[4]}}</li>
    16             <li>{{list[5]}}</li>
    17             <li>{{list[6]}}</li>
    18         </ul>
    19         <!-- 迭代数组 -->
    20         <ul>
    21             <!-- 变量it为集合list中被迭代出的元素 -->
    22             <!-- 由v-for指令控制的标签会随元素的个数动态渲染 -->
    23             <li v-for='it in list'>{{ it }}</li>
    24         </ul>
    25 
    26         <!-- 迭代对象 -->
    27         <div v-for='value in dic'>{{ value }}</div>
    28 
    29         <!-- 迭代除取值外的其他可迭代到的值 -->
    30         <ul>
    31             <li v-for="(v, i) in list">索引:{{i}} 名字:{{v}}</li>
    32         </ul>
    33 
    34         <ul>
    35             <li v-for="(v, k, i) in dic">{{i}} {{k}} {{v}}</li>
    36         </ul>
    37     </div>
    38 </body>
    39 <script type="text/javascript">
    40     new Vue({
    41         el: '#app',
    42         data: {
    43             list: ["张三", "李四", "王五", "赵六", "钱七", "egon", "monkey"],
    44             dic: {'name': 'zero', 'age': 8, 'salary': 88888}
    45         }
    46     })
    47 </script>
    48 </html>
    列表渲染
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>列表渲染</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7 </head>
     8 <body>
     9     <!-- key属性:可以提高效率(通过不同的唯一key值建立缓存) -->
    10     <div id="app">
    11         <div v-for='(item,index) in list' :key='index' style="height: 30px">
    12             <div v-for='(value, key, index) in item' :key='index + 10' style="float: left;">
    13                 {{key}} : {{value}}
    14             </div>
    15         </div>
    16     </div>
    17 </body>
    18 <script type="text/javascript">
    19     new Vue({
    20         el: '#app',
    21         data: {
    22             list: [
    23                 {'name': 'egon', 'age': 108},
    24                 {'name': 'monkey', 'age': 77},
    25                 {'name': 'zero', 'age': 8}
    26             ]
    27         }
    28     })
    29     // items: [{'name': '张三'}, {'age': 18}, {'sex': '男'}]
    30     // 通过[索引]取出数组中对应的值
    31     // 通过.key取出对象中对应的值
    32 </script>
    33 </html>
    复杂数据的列表表达式
     1 <!DOCTYPE html>
     2 <html>
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>todoList</title>
     6     <script type="text/javascript" src="js/vue.js"></script>
     7 </head>
     8 <body>
     9     <!-- 录入用户输入的数据,更新到指定的list中,通过vue的数据驱动特效,实时渲染到页面 -->
    10     <div id="app">
    11         <div>
    12             <input type="text" v-model='value'>
    13             <!-- 提交:将数据添加到list中 -->
    14             <button @click='pushAction'>提交</button>
    15         </div>    
    16         <ul>
    17             <!-- 点击指定的li,将自身数据从list中移除,完成自身删除 -->
    18             <li @click='deleteAction(index)' v-for='(item,index) in list' :key="index">{{ item }}</li>
    19         </ul>
    20 
    21     </div>
    22 </body>
    23 <script type="text/javascript">
    24     new Vue({
    25         el: '#app',
    26         // vue目前不支持索引直接操作数据,但可以通过数据类型对应的操作方法
    27         data: {
    28             value: '',
    29             list: []
    30         },
    31         methods: {
    32             pushAction () {
    33                 this.list.push(this.value);
    34                 this.value = ''
    35             },
    36             deleteAction (index) {
    37                 // alert(index)
    38                 this.list.splice(index, 1)
    39             }
    40         }
    41     })
    42 </script>
    43 </html>
    todoList

    2.6 样式绑定

    class绑定

    <p :class="对象">
    <p :class="数组">
    <p :class="{类名:true/false, 类名:true/false}">
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>选项卡 tabs</title>
     6     <link rel="stylesheet" href="../dist/css/bootstrap.css">
     7     <style>
     8         #app {
     9             margin:100px auto 0px;
    10             800px;
    11         }
    12         .panel {
    13             border-top:none;
    14         }
    15     </style>
    16 </head>
    17 <body>
    18 
    19     <div id="app">
    20         <div class="row">
    21             <div class="col-md-12">
    22                 <ul class="nav nav-tabs">
    23                     <li :class="{active: tab == 0}" @click="tab = 0"><a href="#">未付款订单</a></li>
    24                     <li :class="{active: tab == 1}" @click="tab = 1"><a href="#">未发货订单</a></li>
    25                     <li :class="{active: tab == 2}" @click="tab = 2"><a href="#">未收货订单</a></li>
    26                     <li :class="{active: tab == 3}" @click="tab = 3"><a href="#">未评价订单</a></li>
    27                     <li :class="{active: tab == 4}" @click="tab = 4"><a href="#">所有订单</a></li>
    28                 </ul>
    29 
    30                 <div class="panel panel-default" v-show="tab === 0">
    31                     <div class="panel-body">
    32                         这是未付款的订单
    33                     </div>
    34                 </div>
    35 
    36                 <div class="panel panel-default" v-show="tab === 1">
    37                     <div class="panel-body">
    38                         这是未发货的订单
    39                     </div>
    40                 </div>
    41 
    42                 <div class="panel panel-default" v-show="tab === 2"> 
    43                     <div class="panel-body">
    44                         这是未收货的订单
    45                     </div>
    46                 </div>
    47 
    48                 <div class="panel panel-default" v-show="tab === 3">
    49                     <div class="panel-body">
    50                         这是未评价的订单
    51                     </div>
    52                 </div>
    53 
    54                 <div class="panel panel-default" v-show="tab === 4">
    55                     <div class="panel-body">
    56                         这是所有的订单
    57                     </div>
    58                 </div>
    59             </div>
    60         </div>
    61 
    62     </div>
    63     
    64 
    65     <script src="../dist/js/vue.js"></script>
    66     <script>
    67         let vm = new Vue({
    68             el:'#app',
    69             data: {
    70                 tab: 0
    71             }
    72         })
    73     </script>
    74 </body>
    75 </html>
    vue选项卡1
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>选项卡 tabs</title>
     6     <link rel="stylesheet" href="../dist/css/bootstrap.css">
     7     <style>
     8         #app {
     9             margin:100px auto 0px;
    10             800px;
    11         }
    12         .panel {
    13             border-top:none;
    14         }
    15     </style>
    16 </head>
    17 <body>
    18 
    19     <div id="app">
    20         <div class="row">
    21             <div class="col-md-12">
    22                 <ul class="nav nav-tabs">
    23                     <li :class="{active: isTab(0)}" @click="setTab(0)"><a href="javascript:void(0)">未付款订单</a></li>
    24                     <li :class="{active: isTab(1)}" @click="setTab(1)"><a href="javascript:void(0)">未发货订单</a></li>
    25                     <li :class="{active: isTab(2)}" @click="setTab(2)"><a href="javascript:void(0)">未收货订单</a></li>
    26                     <li :class="{active: isTab(3)}" @click="setTab(3)"><a href="javascript:void(0)">未评价订单</a></li>
    27                     <li :class="{active: isTab(4)}" @click="setTab(4)"><a href="javascript:void(0)">所有订单</a></li>
    28                 </ul>
    29 
    30                 <div class="panel panel-default" v-show="isTab(0)">
    31                     <div class="panel-body">
    32                         这是未付款的订单
    33                     </div>
    34                 </div>
    35 
    36                 <div class="panel panel-default" v-show="isTab(1)">
    37                     <div class="panel-body">
    38                         这是未发货的订单
    39                     </div>
    40                 </div>
    41 
    42                 <div class="panel panel-default" v-show="isTab(2)"> 
    43                     <div class="panel-body">
    44                         这是未收货的订单
    45                     </div>
    46                 </div>
    47 
    48                 <div class="panel panel-default" v-show="isTab(3)">
    49                     <div class="panel-body">
    50                         这是未评价的订单
    51                     </div>
    52                 </div>
    53 
    54                 <div class="panel panel-default" v-show="isTab(4)">
    55                     <div class="panel-body">
    56                         这是所有的订单
    57                     </div>
    58                 </div>
    59             </div>
    60         </div>
    61 
    62     </div>
    63     
    64 
    65     <script src="../dist/js/vue.js"></script>
    66     <script>
    67         let vm = new Vue({
    68             el:'#app',
    69             data: {
    70                 tab: 0
    71             },
    72             methods: {
    73                 setTab(index) {
    74                     this.tab = index;
    75                 },
    76                 isTab(index) {
    77                     return this.tab === index;
    78                 }
    79             }
    80         })
    81     </script>
    82 </body>
    83 </html>
    vue选项卡2
     

    style绑定

    <p :style="{color:'值', background:'值'}">
    <p :style="[{}, {}, {}]">
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Vue样式操作</title>
     6     <style>
     7         .item {
     8              600px;
     9             padding: 10px;
    10             border: 1px solid #ccc;
    11         }
    12         .current {
    13             border-color:red;
    14         }
    15         .active {
    16             border-color:green;
    17         }
    18     </style>
    19 </head>
    20 <body>
    21     <div id="app">
    22         <h1>样式操作</h1>
    23         <hr>
    24 
    25 
    26 
    27         <p class="item" :class="cname"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente alias autem a velit neque dolore blanditiis cumque enim provident, expedita, non debitis, fugiat atque at doloribus distinctio vero repellendus maxime.</p>
    28 
    29         <p class="item" :class="{current:isCurrent, active:true, link:true, 'li-item':true}"> Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente alias autem a velit neque dolore blanditiis cumque enim provident, expedita, non debitis, fugiat atque at doloribus distinctio vero repellendus maxime.</p>
    30 
    31 
    32         <p :class="classObj">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor provident officia facilis ipsam nisi doloribus earum ratione dolorem, minus, suscipit, magnam beatae. Magni dolor similique, a molestias neque officiis animi?</p>
    33 
    34         
    35 
    36         <p :class="classList">Lorem ipsum dolor sit amet.</p>
    37     </div>
    38 
    39     <script src="../dist/js/vue.js"></script>
    40     <script>
    41         new Vue({
    42             el:'#app',
    43             data: {
    44                 cname:'current',
    45                 isCurrent: false,
    46                 classObj: {item:true, link:true,active:true},
    47                 classList: ['link', 'item']
    48             }
    49         });
    50     </script>
    51 </body>
    52 </html>
    vue样式操作
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Vue Style绑定</title>
     6     <style>
     7         p {
     8             border:1px solid #ccc;
     9              700px;
    10             padding:20px;
    11         }
    12     </style>
    13 </head>
    14 <body>
    15     <div id="app">
    16         <h1>Style绑定</h1>
    17 
    18         <p :style="styleValue">Lorem ipsum dolor sit amet.</p>
    19         <p :style="{color:'purple', background:'pink'}">Lorem ipsum dolor sit amet.</p>
    20         <p :style="styleObj">Lorem ipsum dolor sit amet.</p>
    21         <p :style="[styleObj, {borderWidth:'2px'}]">Lorem ipsum dolor sit amet.</p>
    22     </div>
    23 
    24     <script src="../dist/js/vue.js"></script>
    25     <script>
    26         new Vue({
    27             el:'#app',
    28             data: {
    29                 styleValue: 'color:red;background:green',
    30                 styleObj: {color:'pink',background:'#ccc', transform:'translate(0, 0)'}
    31             }
    32         });
    33     </script>
    34 </body>
    35 </html>
    vue样式绑定-style

    2.7 事件

    事件绑定

    <p @事件名="方法">
    <p v-on:事件名="方法">
    方法加 () 的问题
    <p @事件名="方法(1,1,2,3,$event)">
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Vue 事件</title>
     6     <link rel="stylesheet" href="../dist/css/bootstrap.css">
     7 </head>
     8 <body>
     9     <div id="app" class="container">
    10         <div class="page-header">
    11             <h1>Vue 事件</h1>
    12         </div>
    13 
    14         <div class="row">
    15             <div class="col-md-12">
    16                 <button @click="counter ++" class="btn btn-default"> +1 </button>
    17                 <button @click="addCounter(1)" class="btn btn-default"> +1 </button>
    18                 <button @click="addCounter(10)" class="btn btn-default"> +10 </button>
    19 
    20                 <hr>
    21 
    22                 <p class="info">
    23                     {{counter}}
    24                 </p>
    25 
    26                 <hr>
    27 
    28                 <div class="alert alert-info" @mousemove="onMoveFn">
    29                     Lorem ipsum dolor sit amet.
    30                 </div>
    31 
    32 
    33                 <div class="alert alert-danger" @mousemove="onMoveFn($event, 100)">
    34                     Lorem ipsum dolor sit amet.
    35                 </div>
    36             </div>
    37         </div>
    38     </div>
    39 
    40     <script src="../dist/js/vue.js"></script>
    41     <script>
    42         new Vue({
    43             el:'#app',
    44             data: {
    45                 counter:0
    46             },
    47             methods: {
    48                 addCounter(num=1) {
    49                     this.counter += num;
    50                 },
    51 
    52                 onMoveFn(ev, num) {
    53                     console.log(ev.target)
    54                     //ev 是获取的event 对象
    55                     console.log(ev.pageX, ev.pageY)
    56                 }
    57             }
    58         })
    59     </script>
    60 </body>
    61 </html>
    vue事件绑定

    事件修饰符

    .stop  阻止事件冒泡
    .prevent 阻止默认动作  
    .capture   捕获阶段触发事件
    .once     只绑定一次
    .self     只有本身才触发
    .passive   优化移动端的scroll事件

    <p @click.stop="">
    <p @click.stop.prevent="">
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Vue 事件</title>
     6     <link rel="stylesheet" href="../dist/css/bootstrap.css">
     7     <style>
     8         .box {
     9             200px;
    10             height:200px;
    11             border:1px solid red;
    12         }
    13         .inner {
    14             100px;
    15             height:100px;
    16             margin:50px;
    17             background: pink
    18         }
    19     </style>
    20 </head>
    21 <body>
    22     <div id="app" class="container">
    23         <div class="page-header">
    24             <h1>Vue 事件修饰符  键盘修饰符</h1>
    25         </div>
    26 
    27         <div class="row">
    28             <div class="col-md-12">
    29                 <div class="box" @click.self="boxFn">
    30                     <div class="inner" @click="innerFn"></div>
    31                 </div>
    32             </div>
    33         </div>
    34 
    35         <hr>
    36 
    37         <div class="row">
    38             <div class="col-md-6">
    39                 
    40                 <input type="text" class="form-control" @keyup.65="onkeyupFn">
    41                 <input type="text" class="form-control" @keyup.enter="onkeyupFn">
    42                 <input type="text" class="form-control" @keyup.ctrl.65="onkeyupFn">
    43 
    44             </div>
    45         </div>
    46     </div>
    47 
    48     <script src="../dist/js/vue.js"></script>
    49     <script>
    50         new Vue({
    51             el:'#app',
    52             methods: {
    53                 boxFn(){
    54                     console.log('box');
    55                 },
    56                 innerFn(){
    57                     console.log('inner');
    58                     //event.stopPropagation();
    59                 },
    60                 onkeyupFn(event) {
    61                     console.log('按了 '+event.keyCode+' 按键')
    62                 }
    63             }
    64         })
    65     </script>
    66 </body>
    67 </html>
    vue事件修饰符

    键盘修饰符

    .enter
    .space
    .tab
    .up
    .left
    .right
    .down
    .delete
    .数字 (ascii )

    系统按键修饰符

    .ctrl
    .alt
    .shift
    .meta

    <input @keyup.ctrl.enter> 按住ctrl再按回车

    2.8 表单

    文本  
    input:text textarea   v-model

    checkbox 单个 true-value false-value
    true/false

    checkbox 多个
    数组

    单选按钮 input:redio   v-model value值

    select选择框   option的value值     多选 multiple, 数组
    <input v-model="formData.username">
    <input v-model="formData.pwd">
    v-model.trim
    v-model.number 把值转为 number 类型
    v-model.lazy

     

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>表单数据绑定</title>
     6     <style>
     7         p {
     8             border: 1px solid #ccc;
     9              600px;
    10             padding: 20px;
    11         }
    12     </style>
    13 </head>
    14 <body>
    15     <div id="app">
    16         <h1>表单数据绑定</h1>
    17         <hr>
    18 
    19         <input type="text" v-model="message">
    20         <br>
    21         <textarea name="" id="" cols="30" rows="10" v-model="message"></textarea>
    22         <br>
    23         <h3>单个复选框</h3>
    24         <input type="checkbox" v-model="checkVal01" true-value="yes" false-value="no">全选
    25         <br>
    26 
    27         <h3>多个复选框</h3>
    28         <input type="checkbox" value="lanball" v-model="loveList">篮球
    29         <input type="checkbox" value="zuball" v-model="loveList">足球
    30         <input type="checkbox" value="bangball" v-model="loveList">棒球
    31         <input type="checkbox" value="paiball" v-model="loveList">排球
    32 
    33         <h3>单选按钮</h3>
    34         <input type="radio" v-model="sex" value="male">35         <input type="radio" v-model="sex" value="female">36         
    37         <h3>选择框</h3>
    38         <select v-model="address">
    39             <option value="上海">上海</option>
    40             <option value="北京">北京</option>
    41             <option value="深圳">深圳</option>
    42             <option value="广州">广州</option>
    43         </select>
    44 
    45         <h3>修饰符</h3>
    46         <input type="text" v-model.number.lazy="num">
    47         
    48         <p> {{num}} </p>
    49         <p> {{address}} </p>
    50         <p> {{sex}} </p>
    51         <p> {{loveList}} </p>
    52         <p>{{checkVal01}}</p>
    53         <p>{{ message }}</p>
    54         <p>{{ message }}</p>
    55 
    56 
    57     
    58     </div>
    59 
    60     <script src="../dist/js/vue.js"></script>
    61     <script>
    62         let vm = new Vue({
    63             el: '#app',
    64             data:{
    65                 message:'同志',
    66                 checkVal01: true,
    67                 loveList:['bangball'],
    68                 sex:'male',
    69                 address:'广州',
    70                 num:0
    71             }
    72         })
    73     </script>
    74 </body>
    75 </html>
    vue表单数据绑定
     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>表单</title>
     6     <link rel="stylesheet" href="../dist/css/bootstrap.css">
     7     <style>
     8     
     9     </style>
    10 </head>
    11 <body>
    12 
    13     <div id="app">
    14         <div class="container">
    15             <div class="page-header">
    16                 <h1>表单提交</h1>
    17             </div>
    18 
    19             <div class="row">
    20                 <div class="col-md-6">
    21                     <form @submit.prevent="">
    22                         <div class="form-group">
    23                             <label for="#">用户名</label>
    24                             <input type="text" class="form-control" v-model="loginData.username" placeholder="请输入用户名">
    25                         </div>
    26 
    27                         <div class="form-group">
    28                             <label for="#">密码</label>
    29                             <input type="password" class="form-control" v-model="loginData.pwd">
    30                         </div>
    31 
    32                         <div class="checkbox">
    33                             <label for="#">
    34                                 <input type="checkbox" v-model="loginData.remember"> 记住密码
    35                             </label>
    36                         </div>
    37 
    38                         <button class="btn btn-success btn-block" @click="login()">登 录</button>
    39                     </form>
    40                 </div>
    41             </div>
    42         </div>
    43     </div>
    44     
    45 
    46     <script src="../dist/js/vue.js"></script>
    47     <script>
    48         let vm = new Vue({
    49             el:'#app',
    50             data: {
    51                 loginData: {
    52                     username:'',
    53                     pwd:'',
    54                     remember: true
    55                 }
    56             },
    57             methods: {
    58                 login() {
    59                     //获取所有表单的值
    60                     console.log(this.loginData)
    61                 }
    62             }
    63         })
    64     </script>
    65 </body>
    66 </html>
    vue获取表单数据

    实例:todolist

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 <head>
      4     <meta charset="UTF-8">
      5     <title>todoList</title>
      6     <style>
      7         #app {
      8             margin:100px auto 0;
      9             600px;
     10         }
     11         .input-box {
     12             font-size:0;
     13         }
     14         .input-box input {
     15             box-sizing: border-box;
     16             500px;
     17             font-size:16px;
     18             border:1px solid #ccc;
     19             padding:10px;
     20             line-height: 18px;
     21         }
     22         .input-box button {
     23             100px;
     24             padding:10px;
     25             font-size:16px;
     26             border:1px solid #ccc;
     27             background: #f5f5f5;
     28             cursor: pointer;
     29             line-height: 18px;
     30             border-left:none;
     31         }
     32         ul {
     33             list-style: none;
     34             margin:0;
     35             padding:0;
     36         }
     37         .todo-list {
     38             margin-top:20px;
     39         }
     40         .todo-list li{
     41             border:1px solid #ccc;
     42             padding:10px;
     43             margin-bottom:10px;
     44             font-size:0;
     45         }
     46         .todo-list i {
     47             margin-right:20px;
     48             display: inline-block;
     49             16px;
     50             height:16px;
     51             border:1px solid #ccc;
     52             cursor: pointer;
     53             vertical-align: bottom;
     54         }
     55         .todo-list p {
     56             500px;
     57             display: inline-block;
     58             font-size:16px;
     59             margin:0;
     60         }
     61         .todo-list span {
     62             50px;
     63             cursor: pointer;
     64             color:red;
     65             font-size:16px;
     66 
     67         }
     68         .done-list {
     69             margin-top:20px;
     70         }
     71         .done-list li{
     72             border:1px solid #ccc;
     73             padding:10px;
     74             margin-bottom:10px;
     75             background: #999;
     76             color:#ccc;
     77             cursor: not-allowed;
     78             text-decoration: line-through;
     79         }
     80     </style>
     81 </head>
     82 <body>
     83     <div id="app">
     84         <div class="input-box">
     85             <input type="text" v-model.trim="newTodo" placeholder="请输入代办事项">
     86             <button @click="addTodo">添 加</button>
     87         </div>
     88 
     89         <div class="todo-list">
     90             <ul>
     91                 <li v-for="(todo,index) in todoList" :key="index">
     92                     <i @click="addDone(index)"></i>
     93                     <p>{{ todo }}</p>
     94                     <span @click="deleteTodo(index)">&times;</span>
     95                 </li>
     96             </ul>
     97         </div>
     98 
     99         <h3>已完成</h3>
    100         <div class="done-list">
    101             <ul>
    102                 <li v-for="done in doneList" :key="done">{{ done }}</li>
    103             </ul>
    104         </div>
    105     </div>
    106 
    107 
    108     <script src="../dist/js/vue.js"></script>
    109     <script>
    110         new Vue({
    111             el:"#app",
    112             data: {
    113                 todoList: ['今天代码敲三遍', '晚上和小莉莉去喝酒'],
    114                 doneList: [],
    115                 newTodo:''
    116             },
    117             methods: {
    118                 addTodo() {
    119                     //如果输入框是空的,不执行
    120                     if (this.newTodo.length === 0) {
    121                         return;
    122                     }
    123                     //添加内容到 代办事项
    124                     this.todoList.push(this.newTodo)
    125                     //清空输入框
    126                     this.newTodo = '';
    127                 },
    128                 deleteTodo(index) {
    129                     this.todoList.splice(index, 1)
    130                 },
    131                 addDone(index) {
    132                     //把内容添加到 doneList
    133                     this.doneList.push(this.todoList[index])
    134                     //从todoList删掉
    135                     this.deleteTodo(index);
    136                 }
    137             }
    138         })
    139     </script>
    140 </body>
    141 </html>
    todolist
  • 相关阅读:
    python学习之- 内置函数
    python学习之- 生成器/迭代器
    python学习之-- 装饰器
    python基础之
    Python基础之 一 字符编码及转换
    为什么utf8占用3个字节
    Python基础之 一 文件操作
    IIS6与IIS7中如何设置文件过期
    分布式缓存系统Memcached简介与实践
    Log4net
  • 原文地址:https://www.cnblogs.com/Roc-Atlantis/p/9520105.html
Copyright © 2020-2023  润新知