博客列表 >VUE基本语法

VUE基本语法

初见
初见原创
2021年11月04日 10:11:56736浏览

Vue 模板语法

  • options 基础定义
  1. // options 是 vue 实例参数
  2. export default {
  3. name: "App3",
  4. //属性
  5. data() {//看成App3的方法属性
  6. return {
  7. msg: 'xiaoming',
  8. tips:'系统提示'
  9. }
  10. },
  11. //计算属性
  12. computed:{
  13. },
  14. //加载组件
  15. components:{
  16. },
  17. //生命周期
  18. mounted() {
  19. },
  20. //方法
  21. methods:{//看成APP3中的方法
  22. fun(){
  23. console.log(this.msg);
  24. console.log('22222');
  25. },
  26. fun2(){
  27. this.fun();
  28. console.log('3333');
  29. }
  30. }
  31. }
  • MVVM 模式(Model-View-ViewModel)

MVVM

  1. <template>
  2. <div>
  3. <!-- 插值:{{}}-->
  4. 这是界面<hr />
  5. {{msg}}<hr />
  6. {{tips}}
  7. {{fun2()}}<hr/>
  8. <!-- v-model双向绑定-->
  9. <hr/>
  10. <input type="text" v-model="msg">
  11. <hr/>
  12. <!-- 变量能解决的,尽量不要写语法-->
  13. {{msg + 'hello'}}
  14. <hr/>
  15. {{num*5-98}}
  16. <hr/>
  17. <!-- 大写-->
  18. {{msg.toUpperCase()}}
  19. <hr/>
  20. <!-- 指令:v- -->
  21. <!-- v-once 只显示初值 不相应式-->
  22. <b v-once>{{msg}}</b>
  23. <!-- 内容原封不动的展示-->
  24. <p v-pre>{{msg}}</p>
  25. <!-- 就相当于插值表达式的功能-->
  26. <p v-text='msg'></p>
  27. <!-- 可以解析标签-->
  28. <p v-html='title'></p>
  29. <hr/>
  30. ------------------------------<br>
  31. <hr/>
  32. <hr/>
  33. </div>
  34. </template>
  35. <script>
  36. // options 是 vue 实例参数
  37. export default {
  38. name: "App3",
  39. //属性
  40. data() {//看成App3的方法属性
  41. return {
  42. msg: 'xiaoming',
  43. tips:'系统提示',
  44. num:100,
  45. title:'<b>我是标题</b>'
  46. }
  47. },
  48. //计算属性
  49. computed:{
  50. },
  51. //加载组件
  52. components:{
  53. },
  54. //生命周期
  55. mounted() {
  56. },
  57. //方法
  58. methods:{//看成APP3中的方法
  59. fun(){
  60. console.log(this.msg);
  61. console.log('22222');
  62. },
  63. fun2(){
  64. this.fun();
  65. console.log('3333');
  66. }
  67. }
  68. }
  69. </script>

基础

  • v-bind 绑定属性
  1. 插值{{}}只能用在模板内容中,用于动态内容绑定
  2. 如果希望元素的属性也可以动态绑定,需要通过 v-bind 指令
  3. “v-bind”缩写“:”(语法糖)
  4. 绑定有意义元素中的属性
  5. 绑定 class 属性,四种用法(字符串,数组,对象,方法)
  6. 绑定 style 属性
  7. <div
  8. style="font-size:20px;color:red;width:100px;height:100px;background:yellow;"
  9. :style="style1+';'+style2"
  10. >
  11. </div>
  12. <div
  13. style="font-size:20px;color:red;width:100px;height:100px;background:yellow;"
  14. :style="[style1,style2]"
  15. >
  16. </div>
  17. 驼峰 背景颜色 背景图片
  18. <div
  19. style="font-size:20px;color:red;width:100px;height:100px;background:yellow;"
  20. :style="{fontSize:'30px', color:'blue'}"
  21. >
  22. hello world
  23. </div>
  24. <div class="wh one" :class="class1">vue</div>
  25. <div class="wh one" :class="['two', 'three']">vue</div>
  26. <div class="wh one" :class="{two:true}">vue</div>
  27. <!-- 点击显示或隐藏-->
  28. <div @click="show=!show" class="wh one" :class="['two', 'three']">vue</div>
  29. <div class="wh one hide" :class="{show:show}">vue</div>
  30. <div class="wh one hide" :class="['three',{show:show}]">vue</div>
  • 计算属性
  1. 计算属性关键词: computed。
  2. 计算属性在处理一些复杂逻辑时是很有用的。
  3. computed: {
  4. site: {
  5. // getter
  6. get: function () {
  7. return this.name + ' ' + this.url
  8. },
  9. // setter
  10. set: function (newValue) {
  11. var names = newValue.split(' ')
  12. this.name = names[0]
  13. this.url = names[names.length - 1]
  14. }
  15. }
  16. }
  17. <h1>{{ title }} -- {{ subtitle }}</h1>
  18. <h1>{{ title + ' -- ' + subtitle }}</h1>
  19. <h1>{{ atitle() }}</h1>
  20. <h1>{{ alltitle }}</h1>
  21. computed:{
  22. // alltitle:{
  23. // get(){
  24. // return this.title+'-'+this.subtitle;
  25. // }
  26. // },
  27. //简写
  28. alltitle()
  29. {
  30. return this.title + '-' + this.subtitle;
  31. }
  32. }
  • 事件监听
  1. 绑定事件监听器指令:v-on
  2. 缩写: @ (语法糖)
  3. 参数: $event
  4. <template>
  5. <div>
  6. <button v-on:click="show=!show">按钮</button>
  7. <button @click="show=!show">按钮</button>
  8. <button @click="active()">按钮</button>
  9. <div @mouseenter="one('aaa',$event)" @mouseleave="two()" class="wh one hide" :class="{show}">vue</div>
  10. </div>
  11. </template>
  12. <script>
  13. // options 是 vue 实例参数
  14. export default
  15. {
  16. name: "App3",
  17. //属性
  18. data()
  19. {//看成App3的方法属性
  20. return {
  21. title: '我是标题',
  22. subtitle: '我是子标题',
  23. show: true
  24. }
  25. }
  26. ,
  27. //加载组件
  28. components:{
  29. }
  30. ,
  31. //生命周期
  32. mounted()
  33. {
  34. }
  35. ,
  36. //方法
  37. methods:{//看成APP3中的方法
  38. fun()
  39. {
  40. console.log(this.msg);
  41. console.log('22222');
  42. }
  43. ,
  44. atitle()
  45. {
  46. console.log('@@@@@@@@@@@@@@@@@@@@');
  47. return this.title + '-' + this.subtitle;
  48. }
  49. ,
  50. fun2()
  51. {
  52. this.fun();
  53. console.log('3333');
  54. },
  55. active(){
  56. this.show=!this.show;
  57. },
  58. one(args,e){
  59. console.log('1111111'+args);
  60. console.log(e);
  61. },
  62. two(){
  63. console.log('2222222222');
  64. }
  65. }
  66. }
  67. </script>
  68. <style scoped>
  69. .wh {
  70. width: 100px;
  71. height: 100px;
  72. }
  73. .one {
  74. border: 2px solid blue;
  75. }
  76. .two {
  77. color: red;
  78. }
  79. .three {
  80. background: yellow;
  81. }
  82. .hide {
  83. display: none;
  84. }
  85. .show {
  86. display: block;
  87. }
  88. .top {
  89. width: 100px;
  90. height: 100px;
  91. background: blue;
  92. }
  93. .center {
  94. width: 200px;
  95. height: 200px;
  96. background: green;
  97. }
  98. .bottom {
  99. width: 300px;
  100. height: 300px;
  101. background: red;
  102. }
  103. </style>
  104. v-on 事件修饰符号
  105. .stop 阻止事件冒泡
  106. .self 当事件在该元素本身触发时才触发事件
  107. .capture 添加事件侦听器是,使用事件捕获模式
  108. .prevent 阻止默认事件
  109. .once 事件只触发一次
  110. <div @click="bottom()" class="bottom">
  111. <div @click="center()" class="center">
  112. <div @click="top()" class="top"></div>
  113. </div>
  114. </div>
  115. 从top到bottom冒泡
  116. <div @click.stop="top()" class="top"></div>
  117. .stop阻止冒泡
  118. .self 点击自己触发
  119. .self.stop 连用
  120. .capture 捕获
  121. <a href="http://www.php.cn" @click.prevent.once="center">php.cn</a>
  • 条件分支指令
  1. v-if 和 v-show
  2. v-if 是“真正”的条件渲染,因为它会确保在切换过程中条件块内的事件监听器和子 组件适当地被销毁和重建。
  3. v-show 就简单得多——不管初始条件是什么,元素总是会被渲染,并且只是简单 地基于 CSS 进行切换
  4. v-if v-else
  5. v-if v-else-if v-else
  6. <button @click="show = !show">button</button>
  7. <div v-if="show" class="wh one two">if</div>
  8. <div v-else class="wh one center"></div>
  9. <div v-show="show" class="wh one two">if</div>
  • 循环遍历指令
  1. 遍历指令:v-for
  2. 遍历数组 v-for=”(item, [index]) in 数组”
  3. 遍历数字
  4. <div v-for="item in 5">{{item}}=====11111111111111</div>
  5. 遍历数组
  6. <div v-for="(item,index) in arrs.slice(3)">{{idnex}}----{{item}}=====11111111111111</div>
  7. 遍历对象
  8. <div v-for="(item,key,index) in objs">{{index}}--{{key}}--{{item}}</div>
  9. <!-- <div v-for="(item,index) in users">{{index}}&#45;&#45;{{item.name}}</div>-->
  10. <div v-for="(item,index) in users" :key="item.id">
  11. <div v-for="item2 in item">{{item2}}</div>
  12. </div>
  13. //:key="index" 唯一值
  14. vue 中列表循环需加:key="唯一标识" 唯一标识可以是 item 里面 id index 等,因为 vue 组件高度复用增加 Key 可以标识组件的唯一性,为了更好地区别各个组件 key 的作用 主要是为了高效的更新虚拟 DOM,使用 diff 算法的处理方法,对操作前后的 dom 树同 一层的节点进行对比,一层一层对比
  15. <div><input type="text" v-model="name">
  16. <button @click="add()">添加</button>
  17. </div>
  18. <ul>
  19. <li v-for="(item, index) in books" :key="item.id">
  20. <input type="checkbox"> {{ index + 1 }}-{{ item.name }}&#45;&#45;¥{{ item.price }}
  21. </li>
  22. </ul>
  23. return {
  24. name: '',
  25. newid: 6,
  26. books: [{id: 1, name: '细说 PHP', price: 158, active: false},
  27. {id: 2, name: '细说网页制作', price: 158, active: false},
  28. {id: 3, name: '细说 JavaScript', price: 158, active: false},
  29. {id: 4, name: '细说 HTML5 高级 API', price: 158, active: false},
  30. {id: 5, name: '细说 DOM 和 BOM', price: 158, active: false},]
  31. }
  32. add() {
  33. this.books.unshift({id: ++this.newid, name: this.name, price: 128, active: false});
  34. this.name = '';
  35. console.log(this.books);
  36. }
  • v-model
  1. v-model 指令的本质是: 它负责监听用户的输入事件,从而更新数据,并对一些极端 场景进行一些特殊处理。同时,v-model 会忽略所有表单元素的 value、checked、selected 特性的初始值,它总是将 vue 实例中的数据作为数据来源。 然后当输入事件发生时, 实时更新 vue 实例中的数据。
  2. 实现原理: <input v-bind:value="message" v-on:input="message = $event.target.value" />
  3. v-model 的修饰符号:
  4. .lazy 懒加载修饰符
  5. .number 修饰符让其转换为 number 类型
  6. .trim 修饰符可以自动过滤掉输入框的首尾空格
  7. <input type="text" name="usrname" v-model.lazy="msg"><br>
  8. <input type="number" name="usrname" v-model.lazy.number.trim="msg">
  9. <br>
  10. #{{msg}}#
  11. <input type="radio" v-model="sex" value="1">
  12. <input type="radio" v-model="sex" value="2">
  13. <input type="checkbox" v-model="isA"> 同意协议
  14. <br>
  15. <input type="checkbox" value="php" v-model="lang"> PHP <br>
  16. <input type="checkbox" value="java" v-model="lang"> java <br>
  17. <input type="checkbox" value="vue" v-model="lang"> vue <br>
  18. <input type="checkbox" value="react" v-model="lang"> react <br>
  19. {{lang}}
  20. <br>
  21. <select name="lang" size="5" multiple v-model="language" id="">
  22. <option value="php">-- 请选择 --</option>
  23. <option value="java">java</option>
  24. <option value="python">python</option>
  25. <option value="go">go</option>
  26. <option value="vue">vue</option>
  27. <option value="react">react</option>
  28. </select>
  29. <br>
  30. {{language}}
  31. msg:'php.cn',
  32. name: '',
  33. sex:'1',
  34. isA:true,
  35. lang:[],
  36. language:[],

v-model

  • 购物车

思路分析:
1、商品数组列表使用 v-for=”(item,index) in arrs” 进行遍历
2、商品数组列表是否为空,使用v-if v-else
3、列表循环需加:key=”唯一标识”
4、选中布尔值、编号,名称,数量,价格都可以存在商品数组中
5、商品删除使用方法 和 splice
6、购买数量增加减少使用 @click ++ 和 —
7、总价使用 computed 进行计算
8、价格浮点 toFixed

  1. <template>
  2. <div>
  3. <div class="good">
  4. <h1>购物车</h1>
  5. <div v-if="books.length<=0">购物车为空,去购物</div>
  6. <table v-else>
  7. <thead>
  8. <tr>
  9. <th></th>
  10. <th>编号</th>
  11. <th>商品名称</th>
  12. <th>价格</th>
  13. <th>数量</th>
  14. <th>操作</th>
  15. </tr>
  16. </thead>
  17. <tbody>
  18. <tr v-for="(item,index) in books">
  19. <td><input type="checkbox" v-model="item.checkbox"></td>
  20. <td>{{item.id}}</td>
  21. <td>{{item.name}}</td>
  22. <td>{{item.price.toFixed(2)}}</td>
  23. <td>
  24. <button @click="item.num--" :disabled="item.num<=1">-</button>
  25. {{item.num}}
  26. <button @click="item.num++">+</button>
  27. </td>
  28. <td><a href="#" @click.prevent="del(index)">删除</a></td>
  29. </tr>
  30. </tbody>
  31. <tfoot>
  32. <tr>
  33. <td colspan="3">总价</td>
  34. <td colspan="3">{{ totalPrice }}</td>
  35. </tr>
  36. </tfoot>
  37. </table>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. export default {
  43. name: "Shop",
  44. data(){
  45. return{
  46. books:[
  47. {id:1,name:'细说PHP',price:98,num:1,checkbox:true},
  48. {id:2,name:'细说JavaScript',price:188,num:1,checkbox:true},
  49. {id:3,name:'细说网页制作',price:99,num:1,checkbox:true},
  50. {id:4,name:'细说 DOM 和 BOM',price:188,num:1,checkbox:true},
  51. {id:5,name:'细说 HTML5 高级 API',price:168,num:1,checkbox:true},
  52. {id:6,name:'细说 Ajax 高级 jQuery',price:118,num:1,checkbox:true},
  53. ]
  54. }
  55. },
  56. computed:{
  57. totalPrice:{
  58. get(){
  59. let sum=0;
  60. for(let book of this.books ){
  61. if(book.checkbox){
  62. sum += book.price*book.num;
  63. }
  64. }
  65. return '¥'+sum.toFixed(2);
  66. }
  67. }
  68. },
  69. methods:{
  70. del(index){
  71. this.books.splice(index,1)
  72. }
  73. }
  74. }
  75. </script>
  76. <style scoped>
  77. .good{
  78. text-align: center;
  79. width: 860px;
  80. margin: 20px auto;
  81. }
  82. h1{font-weight: bold}
  83. table{width: 100%;
  84. border-collapse: collapse;
  85. border-spacing: 0;
  86. }
  87. tr{
  88. line-height: 40px;
  89. }
  90. th{
  91. border-width: 1px;
  92. border-style: solid;
  93. border-color: #333;
  94. font-weight: bold;
  95. }
  96. td{border-width: 1px;
  97. border-style: solid;
  98. border-color: #333;}
  99. </style>

购物车

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议