Vue 入门教程

158 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

vue

  • 核心:MVVM(Model-View-ViewModel),实现数据的双向绑定,把编程的关注点放在数据上

入门

  • 引入 js 文件
    <script src="js/vue.js"></script>
    
  • 在 JS 代码区域,创建 Vue 核心对象,进行数据绑定
    new Vue({
    	el: "#app",
    	data(){
    		return {
    			username: ""	
    		}
    	}
    })
    
  • 编写视图
    <div id="app">
    	<input name="username" v-model="username">
    	{{username}}
    </div>
    
  • demo
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
            <div id="app">
                <input v-model="username">
                <!--插值表达式-->
                {{username}}
            </div>
    
            <script src="js/vue.js"></script>
            <script>
                // 1. 创建 vue 核心对象
                new Vue({
                    el: "#app",
                    data() {
                        return {
                            username: ""
                        }
                    }
                    /* data: function (){
                        return {
                            username: ""
                        }
                    }*/
                });
            </script>
        </body>
    </html>
    

常用指令

  • v-bind:为 HTML 标签绑定属性值,如设置 href,css 样式等
    <a v-bind:href="url">xxx</a>
    
    <!-- v-bind 可以省略 -->
    <a :href="url">xxx</a>
    
  • v-model:在表单元素上创建双向数据绑定
    <input name="username" v-model="username">
    
  • v-on:为 HTML 标签绑定事件
    • html
    <input type="button" value="button" v-on:click="show()">
    <input type="button" value="button" @click="show()">
    
    • vue
    new Vue({
    	el: "#app",
    	methods: {
    		show() {
    		alert("被点击");
    		}
    	}
    })
    
  • v-if、v-else、v-else-if:条件性的渲染某元素,判定为true时渲染,否则不渲染
    <div v-if="count == 1">div1</div>
                <div v-else-if="count == 2">div2</div>
                <div v-else="count == 3">div3</div>
                <div v-show="count == 1">div v-show</div>
    
  • v-show:根据条件展示某元素,区别在于切换的是 display 属性的值
  • v-for:列表渲染,遍历容器的元素或者对象的属性
    • v-for
    <div v-for="addr in addrs">
    	{{addr}}<br>
    </div>
    
    • 加索引
    <div v-for="(addr,i) in addrs">
    	<!-- i表示索引,从0开始 -->
    	{{i+1}}:{{addr}}<br>
    </div>
    

生命周期

状态阶段周期
beforeCreate创建前
created创建后
beforeMount载入前
mounted挂载完成
beforeUpdate更新前
updated更新后
beforeDestory销毁前
destroyed销毁后

  • mounted:挂载完成,Vue 初始化成功,HTML 页面渲染成功
    • 发送异步请求,加载数据
    • eg:
    new Vue({
    	el: "#app",
    	mounted(){
    		alert("vue 挂载完毕,发送异步请求 ");
    	}
    })
    

业务 - 使用 Vue 简化查询

  • brand.java 添加
        // 逻辑视图
        public String getStatusStr() {
            if (this.status == null) {
                return null;
            }
            if (this.status == 1) {
                return "启用";
            }
            return "禁用";
        }
    
  • brand-vue.html
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="UTF-8">
            <title>Title</title>
        </head>
        <body>
            <div id="app">
                <a href="addBrand.html"><input type="button" value="新增"></a><br>
                <hr>
                <table id="brandTable" border="1" cellspacing="0" width="100%">
                    <tr>
                        <th>序号</th>
                        <th>品牌名称</th>
                        <th>企业名称</th>
                        <th>排序</th>
                        <th>品牌介绍</th>
                        <th>状态</th>
                        <th>操作</th>
                    </tr>
    
                    <!--
                        使用 v-for 遍历 tr
                    -->
                    <tr v-for="(brand,i) in brands" align="center">
                        <td>{{i + 1}}}</td>
                        <td>{{brand.brandName}}</td>
                        <td>{{brand.companyName}}</td>
                        <td>{{brand.ordered}}</td>
                        <td>{{brand.description}}</td>
                        <td>{{brand.statusStr}}</td>
                        <td><a href="#">修改</a> <a href="#">删除</a></td>
                    </tr>
                </table>
            </div>
    
            <script src="js/axios-0.18.0.js"></script>
            <script src="js/vue.js"></script>
            <script>
                new Vue({
                    el: "#app",
                    data() {
                        return {
                            brands: []
                        }
                    },
                    mounted() {
                        // 页面加载完成后,发送异步请求,查询数据
                        var _this = this;  // _this 作用域为 vue
                        axios({
                            method: "get",
                            url: "http://localhost:8080/brand-demo/ajaxSelectAllServlet"
                        }).then(function (resp) {
                            // 这里 this 作用域为 window
                            _this.brands = resp.data;
                        })
                    }
                })
            </script>
        </body>
    </html>
    
  • 测试

业务 - vue 实现新增