zoukankan      html  css  js  c++  java
  • Vue3 学习笔记03-文本插值{{ }}、属性绑定v-bind、v-on 指令(事件处理)、v-if条件语句、v-for

    1 文本插值与v-html 指令

    {{...}} 标签的内容将会被替代为对应组件实例中 rawHtml 属性的值,如果 rawHtml 属性的值发生了改变,{{...}} 标签内容也会更新。

    使用 v-html 指令用于输出 html 代码。

    案例:

    <template>
      <p>使用双大括号的文本插值: {{ rawHtml }}</p>
      <p>使用 v-html 指令: <span v-html="rawHtml"></span></p>
    
    </template>
    
    
    <script>
    import HelloWorld from './components/HelloWorld.vue'
    
    export default{
      name:'App',
      data(){
        return{
          rawHtml: '<span style="color: red">这里会显示红色!</span>'
        }
      }
    }
    </script>

    效果图:

    2. v-bind指令及其缩写

    参数在v-bind指令后,用冒号指明。例如, v-bind 指令被用来响应地更新 HTML 属性:

    <template>
      <p><a v-bind:href="url">菜鸟教程</a></p>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          url: 'https://www.runoob.com'
        }
      }
    }
    
    </script>

    在这里 href 是参数,告知 v-bind 指令将该元素的 href 属性与表达式 url 的值绑定。

    v-bind HTML 属性中的值应使用 v-bind 指令。

    v-model 实现值的双向绑定

    <template>
      <label for="r1">修改颜色</label><input type="checkbox" v-model="use" id="r1">
      <br><br>
      <div v-bind:class="{'class1': use}">
        v-bind:class 指令
      </div>
    
    </template>
    <style>
    .class1{
      background: #444;
      color: #eee;
    }
    </style>
    
    <script>
    import HelloWorld from './components/HelloWorld.vue'
    
    export default{
      name:'App',
      data(){
        return{
          use: false
        }
      }
    }
    
    </script>

    效果图:

    v-bind 缩写

    Vue.js 为两个最为常用的指令提供了特别的缩写:

    <!-- 完整语法 -->
    <a v-bind:href="url"></a>
    <!-- 缩写 -->
    <a :href="url"></a>

    注意:若页面没有变化,可能是因为缓存的原因,建议刷新浏览器,重试。

    3.v-on指令

     v-on 指令,它用于监听 DOM 事件。

    按钮的事件我们可以使用 v-on 监听事件,并对用户的输入进行响应。

    以下实例在用户点击按钮后对字符串进行反转操作:

    <template>
      <p>{{ message }}</p>
      <button v-on:click="reverseMessage">反转字符串</button>
    </template>
    
    
    <script>
    export default{
      name:'App',
      data(){
        return{
          message: 'Runoob!'
        }
      },
      methods:{
        reverseMessage() {
        this.message = this.message
          .split('')
          .reverse()
          .join('')
        }
      }
    }
    </script>

    效果图:

    v-on 缩写:

    <!-- 完整语法 -->
    <a v-on:click="doSomething"></a>
    <!-- 缩写 -->
    <a @click="doSomething"></a>

    5.v-if指令

    <template>
      <p v-if="seen">现在你看到我了</p>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          seen: true  /* 改为false,信息就无法显示 */
        }
      },
    }
    
    </script>

    这里, v-if 指令将根据表达式 seen 的值( true 或 false )来决定是否插入 p 元素。

    因为 v-if 是一个指令,所以必须将它添加到一个元素上。如果是多个元素,可以包裹在 <template> 元素上,并在上面使用 v-if。最终的渲染结果将不包含 <template> 元素。

    <div id="app">
        <template v-if="seen">
            <h1>网站</h1>
            <p>Google</p>
            <p>Runoob</p>
            <p>Taobao</p>
        </template>
    </div>

    v-else指令

    可以用 v-else 指令给 v-if 添加一个 "else" 块:

    <template>
      <div v-if="Math.random() > 0.5">
        随机数大于 0.5
      </div>
      <div v-else>
        随机数小于等于 0.5
      </div>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          
        }
      },
    }
    
    </script>

    效果图:

    v-else-if

    v-else-if 即 v-if 的 else-if 块,可以链式的使用多次:

    <template>
      <div v-if="type === 'A'">
            A
      </div>
      <div v-else-if="type === 'B'">
        B
      </div>
      <div v-else-if="type === 'C'">
        C
      </div>
      <div v-else>
        Not A/B/C
      </div>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          type: "E" 
        }
      },
    }
    
    </script>

    效果图:

    6.v-for指令

    v-for 指令可以绑定数组的数据来渲染一个项目列表。

    为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。理想的 key 值是每项都有的且唯一的 id。

    建议尽可能在使用 v-for 时提供 key。

    6.1 v-for 迭代数组

    v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名。

    <template>
    <!-- <ol> 标签定义有序列表 -->
      <ol>
        <!-- <li> 标签定义列表项目。 -->
        <li v-for="site in sites" :key="site.index">
          {{ site.text }}
        </li>
      </ol>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          sites: [
            { text: 'Google' },
            { text: 'Runoob' },
            { text: 'Taobao' }
          ]
        }
      },
    }
    
    </script>

    效果图:

    6.2 v-for 还支持一个可选的第二个参数,参数值为当前项的索引:

    <template>
      <ol>
        <li v-for="(site,index) in sites" :key="index">
          {{index}}-{{ site.text }}
        </li>
      </ol>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          sites: [
            { text: 'Google' },
            { text: 'Runoob' },
            { text: 'Taobao' }
          ]
        }
      },
    }
    
    </script>

    效果图:

    6.3 v-for 迭代对象

    第1个参数为value值,第2个参数为为键名key

    <template>
      <ul>
        <li v-for="(value,key) in object" :key="value">
          {{key}} {{ value }}
        </li>
      </ul>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
          object: {
            name: '菜鸟教程',
            url: 'http://www.runoob.com',
            slogan: '学的不仅是技术,更是梦想!'
          }
        }
      },
    }
    
    </script>

    效果图:

    6.4 v-for 迭代整数

    v-for 也可以循环整数

    <template>
      <ul>
        <li v-for="n in 5" :key="n">
         {{ n }}
        </li>
      </ul>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data(){
        return{
      
        }
      },
    }
    
    </script>

    效果图:

    7. 综合案例

    <template>
      <select @change="changeVal($event)" v-model="selOption">
          <template v-for="(site,index) in sites" :site="site" :index="index" :key="site.id">
             <!-- 索引为 1 的设为默认值,索引值从0 开始-->
             <option v-if = "index == 1" :value="site.name" selected>{{site.name}}</option>
             <option v-else :value="site.name">{{site.name}}</option>
          </template>
       </select>
       <div>您选中了:{{selOption}}</div>
    </template>
    
    
    <script>
    
    export default{
      name:'App',
      data() {
          return {
            selOption: "Runoob",
            sites: [
                  {id:1,name:"Google"},
                  {id:2,name:"Runoob"},
                  {id:3,name:"Taobao"},
            ]
          }
          
      },
      methods:{
          changeVal:function(event){
            this.selOption = event.target.value;
            alert("你选中了"+this.selOption);
          }
      }
    }
    
    </script>

    效果图:

  • 相关阅读:
    [SCOI2016] 幸运数字
    [CF438E] 小朋友和二叉树
    【题解】[AHOI2013]作业
    【题解】CF940F Machine Learning
    【题解】CF1207E XOR Guessing
    【题解】CF1228D Complete Tripartite
    【题解】CF1290B Irreducible Anagrams
    【题解】[JSOI2007]字符加密
    【题解】[SDOI2016]征途
    【题解】多边形染色
  • 原文地址:https://www.cnblogs.com/luckyplj/p/15046015.html
Copyright © 2011-2022 走看看