java进阶vue基础 (java编程vue组件基础教程)

#头条创作挑战赛#

1.3 Vue 指令

指令: HTML 标签上带有 v- 前缀的特殊属性,不同指令具有不同含义。例如:v-if,v-for…

常用的指令有:

指令

作用

v-bind

为HTML标签绑定属性值,如设置 href , css样式等

v-model

在表单元素上创建双向数据绑定

v-on

为HTML标签绑定事件

v-if

条件性的渲染某元素,判定为true时渲染,否则不渲染

v-else

v-else-if

v-show

根据条件展示某元素,区别在于切换的是display属性的值

v-for

列表渲染,遍历容器的元素或者对象的属性

接下来我们挨个学习这些指令

1.3.1 v-bind & v-model 指令

java与vue实时通信,java实现vue语法树

  • v-bind
  • 该指令可以给标签原有属性绑定模型数据。这样模型数据发生变化,标签属性值也随之发生变化
  • 例如:
  • <a v-bind:href = "url" > 百度一下 </a>
  • 上面的 v-bind:" 可以简化写成 : ,如下:
  • <!-- v-bind 可以省略 --> <a :href = "url" > 百度一下 </a>
  • v-model
  • 该指令可以给表单项标签绑定模型数据。这样就能实现双向绑定效果。例如:
  • <input name = "username" v-model = "username" >

代码演示:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
 <div id="app">
     <a v-bind:href="url">点击一下</a>
     <a :href="url">点击一下</a>
     <input v-model="url">
 </div>
 
 <script src="js/vue.js"></script>
 <script>
     //1. 创建Vue核心对象
     new Vue({
         el:"#app",
         data(){
             return {
                 username:"",
                 url:"https://www.baidu.com"
             }
         }
     });
 </script>
 </body>
 </html>

通过浏览器打开上面页面,并且使用检查查看超链接的路径,该路径会根据输入框输入的路径变化而变化,这是因为超链接和输入框绑定的是同一个模型数据

java与vue实时通信,java实现vue语法树

1.3.2 v-on 指令

我们在页面定义一个按钮,并给该按钮使用 v-on 指令绑定单击事件,html代码如下

java与vue实时通信,java实现vue语法树

 <input type="button" value="一个按钮" v-on:click="show()">

而使用 v-on 时还可以使用简化的写法,将 v-on: 替换成 @ ,html代码如下

 <input type="button" value="一个按钮" @click="show()">

上面代码绑定的 show() 需要在 Vue 对象中的 methods 属性中定义出来

 new Vue({
     el: "#app",
     methods: {
         show(){
             alert("我被点了");
         }
     }
 });

注意: v-on: 后面的事件名称是之前原生事件属性名去掉on。

例如:

单击事件 : 事件属性名是 onclick,而在vue中使用是 v-on:click

失去焦点事件:事件属性名是 onblur,而在vue中使用时 v-on:blur

整体页面代码如下:



 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
 <div id="app">
     <input type="button" value="一个按钮" v-on:click="show()"><br>
     <input type="button" value="一个按钮" @click="show()">
 </div>
 <script src="js/vue.js"></script>
 <script>
     //1. 创建Vue核心对象
     new Vue({
         el:"#app",
         data(){
             return {
                 username:"",
             }
         },
         methods:{
             show(){
                 alert("我被点了...");
             }
         }
     });
 </script>
 </body>
 </html>

1.3.3 条件判断指令

java与vue实时通信,java实现vue语法树

接下来通过代码演示一下。在 Vue中定义一个 count 的数据模型,如下

 //1. 创建Vue核心对象
 new Vue({
     el:"#app",
     data(){
         return {
             count:3
         }
     }
 });

现在要实现,当 count 模型的数据是3时,在页面上展示 div1 内容;当 count 模型的数据是4时,在页面上展示 div2 内容; count 模型数据是其他值时,在页面上展示 div3 。这里为了动态改变模型数据 count 的值,再定义一个输入框绑定 count 模型数据。html 代码如下:

 <div id="app">
     <div v-if="count == 3">div1</div>
     <div v-else-if="count == 4">div2</div>
     <div v-else>div3</div>
     <hr>
     <input v-model="count">
 </div>

整体页面代码如下:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
 <div id="app">
     <div v-if="count == 3">div1</div>
     <div v-else-if="count == 4">div2</div>
     <div v-else>div3</div>
     <hr>
     <input v-model="count">
 </div>
 
 <script src="js/vue.js"></script>
 <script>
     //1. 创建Vue核心对象
     new Vue({
         el:"#app",
         data(){
             return {
                 count:3
             }
         }
     });
 </script>
 </body>
 </html>

通过浏览器打开页面并在输入框输入不同的值,效果如下

java与vue实时通信,java实现vue语法树

然后我们在看看 v-show 指令的效果,如果模型数据 count 的值是3时,展示 div v-show 内容,否则不展示,html页面代码如下

 <div v-show="count == 3">div v-show</div>
 <br>
 <input v-model="count">

浏览器打开效果如下:

java与vue实时通信,java实现vue语法树

通过上面的演示,发现 v-show v-if 效果一样,那它们到底有什么区别呢?我们根据浏览器的检查功能查看源代码

java与vue实时通信,java实现vue语法树

通过上图可以看出 v-show 不展示的原理是给对应的标签添加 display css属性,并将该属性值设置为 none ,这样就达到了隐藏的效果。而 v-if 指令是条件不满足时根本就不会渲染。

1.3.4 v-for 指令

java与vue实时通信,java实现vue语法树

这个指令看到名字就知道是用来遍历的,该指令使用的格式如下:

 <标签 v-for="变量名 in 集合模型数据">
     {{变量名}}
 </标签>

注意:需要循环那个标签, v-for 指令就写在那个标签上。

如果在页面需要使用到集合模型数据的索引,就需要使用如下格式:

 <标签 v-for="(变量名,索引变量) in 集合模型数据">
     <!--索引变量是从0开始,所以要表示序号的话,需要手动的加1-->
    {{索引变量 + 1}} {{变量名}}
 </标签>

代码演示:

 <!DOCTYPE html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>Title</title>
 </head>
 <body>
 <div id="app">
     <div v-for="addr in addrs">
         {{addr}} <br>
     </div>
 
     <hr>
     <div v-for="(addr,i) in addrs">
         {{i+1}}--{{addr}} <br>
     </div>
 </div>
 
 <script src="js/vue.js"></script>
 <script>
 
     //1. 创建Vue核心对象
     new Vue({
         el:"#app",
         data(){
             return {
                 addrs:["北京","上海","西安"]
             }
         }
     });
 </script>
 </body>
 </html>

通过浏览器打开效果如下

java与vue实时通信,java实现vue语法树