Vue指令

£神魔★判官ぃ 2021-07-24 19:31 668阅读 0赞

Vue指令

1. watch监听

在vue中watch就是时时刻刻的监听绑定的这个data模型数据,当这个数据发生变化的时候,watch就会被触发,自动的执行其中的逻辑
代码:

  1. <div id="demodiv">
  2. <input type="text" v-model="text">{
  3. {text}}
  4. </div>
  5. <script>
  6. new Vue({
  7. el:"#demodiv",
  8. data:{
  9. text:"这是watch测试"
  10. },
  11. methods: {
  12. },
  13. watch: {
  14. text(newval,oldval){
  15. console.log(newval+"-----"+oldval);
  16. }
  17. }
  18. })
  19. </script>

案例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7. <title>Document</title>
  8. <link rel="stylesheet" href="node_modules/bootstrap/dist/css/bootstrap.min.css">
  9. </head>
  10. <body>
  11. <!-- 1.重置功能 点击之后清空输入框 -->
  12. <!-- 2.写一些模拟数据先把表格用模拟数据生成 -->
  13. <!-- 3.添加功能的完成 -->
  14. <!-- 4.设置当没有输入内容的时候添加不能点击 -->
  15. <!-- 5.设置好模态框 -->
  16. <!-- 6.删除功能 -->
  17. <!-- 6-1删除单个 当点击删除按钮的时候 把当前按钮这一行的下标传给一个变量 -->
  18. <!-- 6-2在模态框的删除按钮上添加一个点击事件 调用删除的函数并且 把delnum当成实参传入 -->
  19. <div id="demodiv">
  20. <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
  21. <div class="modal-dialog" role="document">
  22. <div class="modal-content">
  23. <div class="modal-header">
  24. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  25. <span aria-hidden="true">×</span>
  26. </button>
  27. <h4 class="modal-title">删除</h4>
  28. </div>
  29. <div class="modal-body">
  30. <p>亲^_^,您确定要删除吗?</p>
  31. </div>
  32. <div class="modal-footer">
  33. <button type="button" class="btn btn-default" data-dismiss="modal" @click="del(delnum)">删除</button>
  34. <button type="button" class="btn btn-primary" data-dismiss="modal">取消</button>
  35. </div>
  36. </div><!-- /.modal-content -->
  37. </div><!-- /.modal-dialog -->
  38. </div><!-- /.modal -->
  39. <div class="container">
  40. <input type="text" class="form-control" placeholder="请输入用户名" v-model="inputa"><br>
  41. <input type="text" class="form-control" placeholder="请输入年龄" v-model="inputb"><br>
  42. <button type="button" class="btn btn-success" @click="add()" v-bind:disabled="bool">添加</button>
  43. <button type="button" class="btn btn-info" v-on:click="chongzhi()">重置</button>
  44. <h1>用户信息收集表</h1>
  45. <table class="table table-bordered table-hover">
  46. <thead>
  47. <tr>
  48. <th>序号</th>
  49. <th>名字</th>
  50. <th>年龄</th>
  51. <th>操作</th>
  52. </tr>
  53. </thead>
  54. <tbody>
  55. <tr v-for="(v,i) in obj">
  56. <td>{
  57. {i}}</td>
  58. <td>{
  59. {v.name}}</td>
  60. <td>{
  61. {v.age}}</td>
  62. <td>
  63. <button type="button" class="btn btn-danger" data-toggle="modal" data-target="#myModal"
  64. @click="delnum=i">删除</button>
  65. </td>
  66. </tr>
  67. <tr v-if="obj.length>0">
  68. <td colspan="4" align="right">
  69. <button type="button" class="btn btn-info" data-toggle="modal" data-target="#myModal" @click="delnum=-1">删除全部</button>
  70. </td>
  71. </tr>
  72. <tr v-else>
  73. <td colspan="4" align="center">
  74. <span>暂无数据...</span>
  75. </td>
  76. </tr>
  77. </tbody>
  78. </table>
  79. </div>
  80. </div>
  81. </body>
  82. </html>
  83. <script src="node_modules/vue/dist/vue.min.js"></script>
  84. <script src="node_modules/jquery/dist/jquery.min.js"></script>
  85. <script src="node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
  86. <script>
  87. new Vue({
  88. el: "#demodiv",
  89. data: {
  90. inputa: "",
  91. inputb: "",
  92. obj: [{
  93. name: "王大锤",
  94. age: 23
  95. },
  96. {
  97. name: "王大锤",
  98. age: 23
  99. },
  100. {
  101. name: "王大锤",
  102. age: 23
  103. },
  104. {
  105. name: "王大锤",
  106. age: 23
  107. },
  108. {
  109. name: "王大锤",
  110. age: 23
  111. }
  112. ],
  113. bool: true,
  114. delnum:-2
  115. },
  116. methods: {
  117. chongzhi() {
  118. this.inputa = "";
  119. this.inputb = "";
  120. },
  121. add() {
  122. this.obj.push({
  123. name: this.inputa,
  124. age: this.inputb
  125. });
  126. this.inputa = "";
  127. this.inputb = "";
  128. },
  129. del(delnum) {
  130. console.log(delnum);
  131. if(delnum==-1){
  132. this.obj=[];
  133. }else{
  134. this.obj.splice(delnum,1);
  135. }
  136. }
  137. },
  138. watch: {
  139. //监听两个输入框的值
  140. inputa() {
  141. if (this.inputa != "" && this.inputb != "") {
  142. this.bool = false;
  143. } else {
  144. this.bool = true;
  145. }
  146. },
  147. inputb() {
  148. if (this.inputa != "" && this.inputb != "") {
  149. this.bool = false;
  150. } else {
  151. this.bool = true;
  152. }
  153. }
  154. }
  155. })
  156. </script>

2. 事件对象

  1. 语法:
    < /div>
    在上述对象中,event为事件对象
  2. 作用:记录事件相关的信息

    1. <button @click="fun($event)">点我啊</button>
    2. <input type="text" @keydown="func($event)">

3. 事件修饰符

  1. 概念:v-on指令提供了事件修饰符来处理DOM事件细节
  2. 语法:@click.修饰符=‘fn()’
  3. 常见的按键修饰符: .up, .down, .ctrl, .enter, .space等等

1. prevent修饰符

阻止事件的默认行为(submit提交表单)

2. stop修饰符

阻止事件冒泡
注意: 修饰符可以串联使用
案例:

  1. <div id="demodiv">
  2. <input type="text" v-on:keydown.down="fun()">
  3. <form action="http://www.baidu.com" method="GET">
  4. <input type="submit" value="提交" @click.prevent="funa()">
  5. </form>
  6. <div @click="funb()">
  7. 哪吒之魔童转世
  8. <input type="button" value="购买" @click.stop="func()">
  9. </div>
  10. </div>
  11. <script>
  12. new Vue({
  13. el:"#demodiv",
  14. data:{
  15. input:""
  16. },
  17. methods: {
  18. fun(){
  19. console.log("么么哒");
  20. },
  21. funa(){
  22. console.log("提交");
  23. },
  24. funb(){
  25. console.log("我是div");
  26. },
  27. func(){
  28. console.log("我是button");
  29. }
  30. }
  31. })
  32. </script>

4. 计算属性

1. 为什么要用计算属性

板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护

  1. <p>{
  2. {text.toUpperCase().substr(2,1)}}</p>

2. 计算属性

  1. 概念:
    顾名思义,首先它是一种属性,其次它有“计算”这个特殊性质。每次取得它的值得时候,它并不像普通属性那样直接返回结果,而是经过一系列的计算之后再返回结果。同时只要在它的当中里引用了 data 中的某个属性,当这个属性发生变化时,计算属性仿佛可以嗅探到这个变化,并自动重新执行。
  2. 语法

    computed: {

    1. 需要返回的数据: function () {
    2. return 处理操作
    3. }

    }

  3. 使用

    //改造把数据转大写并且截取的例子
    computed:{

    1. demoText:function(){
    2. return this.text.toUpperCase().substr(2,1);
    3. }

    }

或者:

  1. methods:{
  2. textfun(){
  3. return this.text.toUpperCase().substr(2,2)
  4. }
  5. }
  1. 那么计算属性和方法有什么区别呢?

    • 计算属性是基于它们的依赖进行缓存的。计算属性只有在它的相关依赖发生改变时才会重新求值。
    • 方法绑定数据只要被调用,方法将总会再次执行函数。
    • 计算属性相对于方法在处理特定场合下节省资源性能
    • watch:可以监听模型数据 当模型数据改变的时候就会触发
    • watch初始化的时候不会运行,只有数据被改变之后才会运行

什么时候使用watch

  1. 当需要在数据变化时执行异步或开销较大的操作时,watch这个方式是最有用的。
  2. 计算属性与侦听器的区别:

    1. 当watch监听的值发生改变就会被调用,watch可以在数据变化时做一些异步处理或者开销大的操作
    2. 计算属性是计算依赖的值,当依赖的值发生改变才会触发。
      案例:

    {
    {fun()}}


    {
    {fun()}}


    {
    {fun()}}


    {
    {fun()}}


    {
    {fun()}}


    {
    {fun()}}


    {
    {newtext}}


    {
    {newtext}}


    {
    {newtext}}


    {
    {newtext}}


    {
    {newtext}}


    {
    {newtext}}


发表评论

表情:
评论列表 (有 0 条评论,668人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Vue指令

    一、Vue指令的规定 1. 所有的Vue指令必须以v-开头,后面带命令动词。 2. 指令的参数:v-指令动词.参数 3. 指令的修饰符:v-指令动词:修饰符 二

    相关 Vue指令

    v-text v-text的作用跟插值表达式是一样的,但是不同的地方在于:v-text会覆盖元素中原本的内容,插值表达式只会替换自己的这个占位符,不会把整个元素的内容清空

    相关 vue指令

    总结 v-text v-text是一个渲染文本的指令 不能解析标签 会把标签当成字符串渲染在页面上 v-html v-html 也是一个渲染

    相关 vue指令

    vue指令 一个正在努力爱好运动的前端 座右铭:越努力越幸运,越运动越健康,热爱编程,热爱运动。 -------------------- 文章目录

    相关 Vue指令

    Vue指令 1. watch监听 在vue中watch就是时时刻刻的监听绑定的这个data模型数据,当这个数据发生变化的时候,watch就会被触发,自动的执行其中的