欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

VUE基本语法

程序员文章站 2022-03-03 22:37:01
...

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)

VUE基本语法

  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>

VUE基本语法

  • 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:[],

VUE基本语法

  • 购物车

思路分析:
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>

VUE基本语法