谷粒学院-8-vue环境

一、介绍

1、Vue.js 是什么

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。 Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代 化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

官方网站:https://cn.vuejs.or

2、初始Vue.js

<div id="app">
    {{message}}
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            message: "hello vue!"
        }
    })
</script>

这就是声明式渲染:Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系 统 这里的核心思想就是没有繁琐的DOM操作,例如jQuery中,我们需要先找到div节点,获取到DOM对象,然后进行一系列的节点操作

二、基本语法

1、单向绑定

单向绑定指的是:我只能去读取这个数据,但如果这个数据在我这里发生了修改,是不会输出的

你看到的 v-bind 特性被称为指令。指令带有前缀 v除了使用插值表达式{{}}进行数据渲染,也可以使用 v-bind指令,它的简写的形式就是一个冒号(:)

<div id="app">
    <!--v-bind单向绑定指令,主要用于绑定对应标签的属性-->
    <img v-bind:src="href">
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            content: '我是标题',
            message: "页面加载于.." + new Date().toLocaleDateString(),
            href: "https://exploit-typora.oss-cn-shenzhen.aliyuncs.com/springbootTest/header.png"
        }
    })
</script>

2、双向绑定

<div>
    <!--在这个地方输入图片url,下面的图就会变-->
    <input type="text" v-model="href">
    <!--v-bind单向绑定指令,主要用于绑定对应标签的属性-->
    <img style="width: 200px;" v-bind:src="href">
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            content: '我是标题',
            message: "页面加载于.." + new Date().toLocaleDateString(),
            href: "https://exploit-typora.oss-cn-shenzhen.aliyuncs.com/springbootTest/header.png"
        },
        methods:{
            next(){
                console.log("下一副图")
            },
            previous(){
                console.log("上一副图")
            }
        }
    })
</script>

3、事件

<div>
    <!-- v-on 指令绑定事件,click指定绑定的事件类型,事件发生时调用vue中methods节点中定义的方法 -->
    <button v-on:click="search()">查询</button>
    <p>您要查询的是:{{searchMap.keyWord}}</p>
    <p><a v-bind:href="result.site" target="_blank">{{result.title}}</a></p>
</div>
<script>
    data: {
 		searchMap:{
 		keyWord: '尚硅谷'
 	},
 	//查询结果
	result: {}
},
methods:{
 	search(){
 	console.log('search')
 	//TODO
 }
}
</script>

4、修饰符

修饰符 (Modifiers) 是以半角句号(.)指明的特殊后缀,用于指出一个指令应该以特殊方式绑定。 例如,.prevent 修饰符告诉 v-on 指令对于触发的事件调用 event.preventDefault(): 即阻止事件原本的默认行为

<div id="app">
    <form v-on:submit.prevent="submit()">
        <label for="username">
            输入你的名字:<input id="username" type="text" v-model="user.username">
        </label>
        <label>
            <input type="submit" value="提交">
        </label>
    </form>
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            user:{
                username: "wang"
            }
        },
        methods:{
            submit() {
                console.log(this.user.username)
            }
        }
    })
</script>

5、条件渲染

<div id="app">
    <!--切换success的boolean值,选中为true,不选中为false-->
    <input type="checkbox" v-model="success">
    <!--根据success的boolean值判断出现哪一个-->
    <h1 v-if="success">喜欢哦</h1>
    <h1 v-else>ok</h1>
    <h1>-------------------------------</h1>
    <!--v-show比v-if好用-->
    <h1 v-show="success">hello</h1>
    <h1 v-show="!success">你好啊</h1>
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            success:false
        }
    })
</script>

6、列表渲染

属性列表循环

<div id="app">
<table border="1">
    <tr v-for="(item, index) in userList">
        <td>这个user在循环中的位置,index可以不存在:{{index}}</td>
        <td>user对象的id:{{item.id}}</td>
        <td>user对象的name:{{item.username}}</td>
        <td>user对象的age:{{item.age}}</td>
    </tr>
</table>
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            userList:[
                {id: 1,username: "tom",age:18},
                {id: 2,username: "iii",age:20},
                {id: 3,username: "ooo",age:22}
            ]
        }
    })
</script>

三、组件

组件(Component)是 Vue.js 最强大的功能之一。

组件可以扩展 HTML 元素,封装可重用的代码。

组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为 一个组件树

1、局部组件

<div id="app">
    <hello></hello>
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            message: "hello vue!"
        },
        components: {
            //组件的名字
            "hello":{
                template: '<div>\n' +
                    '    <ul>\n' +
                    '        <li>首页</li>\n' +
                    '        <li>hello</li>\n' +
                    '        <li>你好呀</li>\n' +
                    '    </ul>\n' +
                    '</div>'
            }
        }
    })
</script>

2、全局组件

创建全局组件:是一个单独的js文件

不需要引入vue的js文件

Vue.component(
  "hello" , {
        template: '<div>\n' +
            '    <ul>\n' +
            '        <li>首页</li>\n' +
            '        <li>hello</li>\n' +
            '        <li>你好呀</li>\n' +
            '    </ul>\n' +
            '</div>'
    }
);

使用组件

<!doctype html>
<html lang="en">
<head>
    
    
    
    <title>global</title>
    <script src="vue/vue.min.js"></script>
    <script src="component/component.js"></script>
</head>
<body>
<div id="app">
    {{message}}
    <hello></hello>
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            message: "hello vue!"
        }
    })
</script>
</body>
</html>

四、vue生命周期

指的就是在script标签中的new Vue对象的生命周期,创建、渲染、更新、到销毁的过程

<div id="app">
    {{message}}
    <hello></hello>
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            message: "hello vue!"
        },
        //===创建时的四个事件
        beforeCreate() { // 第一个被执行的钩子方法:实例被创建出来之前执行
            console.log(this.message) //undefined
            this.show() //TypeError: this.show is not a function
            // beforeCreate执行时,data 和 methods 中的 数据都还没有没初始化
        },
        created() { // 第二个被执行的钩子方法
            console.log(this.message) //床前明月光
            this.show() //执行show方法
            // created执行时,data 和 methods 都已经被初始化好了!
            // 如果要调用 methods 中的方法,或者操作 data 中的数据,最早,只能在 created 中操作
        },
        beforeMount() { // 第三个被执行的钩子方法
            console.log(document.getElementById('h3').innerText) //{{ message }}
            // beforeMount执行时,模板已经在内存中编辑完成了,尚未被渲染到页面中
        },
        mounted() { // 第四个被执行的钩子方法
            console.log(document.getElementById('h3').innerText) //床前明月光
            // 内存中的模板已经渲染到页面,用户已经可以看见内容
        },
//===运行中的两个事件
        beforeUpdate() { // 数据更新的前一刻
            console.log('界面显示的内容:' + document.getElementById('h3').innerText)
            console.log('data 中的 message 数据是:' + this.message)
            // beforeUpdate执行时,内存中的数据已更新,但是页面尚未被渲染
        },
        updated() {
            console.log('界面显示的内容:' + document.getElementById('h3').innerText)
            console.log('data 中的 message 数据是:' + this.message)
            // updated执行时,内存中的数据已更新,并且页面已经被渲染
        }
    })
</script>

五、路由

Vue.js 路由允许我们通过不同的 URL 访问不同的内容。

通过 Vue.js 可以实现多视图的单页Web应用(single page web application,SPA)。

Vue.js 路由需要载入 vue-router 库

引入js

<script src="vue/vue.min.js"></script>
<!--注意router必须要在vue包之后导入,否则失败-->
<script src="vue/vue-router.min.js"></script>

html文件

<div id="app">
    <h1>Hell Router!</h1>
    <p>
        <router-link to="/">首页</router-link>
        <router-link to="/student">会员管理</router-link>
        <router-link to="/teacher">讲师管理</router-link>
    </p>
    <!--路由出口-->
    <router-view></router-view>
</div>
<script>
    /*
    * 1、定义组件
    * 可以从其他文件import进来
    * */
    const Welcome = { template: '<div>欢迎</div>' };
    const Student = { template: '<div>student list</div>' };
    const Teacher = { template: '<div>teacher list</div>' };

    /*
    * 2、定义路由
    * 每个路由映射一个组件
    * */
    const routes = [
        {path:"/",redirect:"/welcome"},
        {path:"/welcome",component: Welcome},
        {path:"/student",component: Student},
        {path:"/teacher",component: Teacher},
    ];

    /*
    * 3、创建router实例
    * 然后传`routers`配置
    * */
    const router = new VueRouter({
        routes:routes
    });

    /*
    * 4、创建和挂载实例
    * 从而让整个应用都有路由功能
    * */
    const app = new Vue({
        el:'#app',
        router:router
    });
</script>

六、axios使用

axios.get(url).then(请求成功函数).catch(失败处理函数)

<div id="app">
    <h1>{{teacher.name}}</h1>
    <h1>{{teacher.career}}</h1>
    <h1>{{teacher.intro}}</h1>
    <img :src="teacher.avatar" alt="" >
</div>
<script>
    new Vue({
        el: "#app", //绑定vue作用的范围
        data: {
            teacher : null
        },
        created() {
            this.getList(1)
        },
        methods:{
            getList(id){
                axios.get("http://localhost:8001/eduservice/edu-teacher/"+id)
                .then(response => {
                    console.log(response);
                    this.teacher = response.data.data.teacher;
                })
                .catch(error => {
                    console.log(error);
                })
            }
        }

    })
</script>

这里还需要post请求,put请求,delete请求,之后再了解

七、element-ui使用

element-ui 是饿了么前端出品的基于 Vue.js的 后台组件库,方便程序员进行页面快速布局和构建

官网: http://element-cn.eleme.io/#/zh-CN

将element-ui引入到项目中

1、引入js和css

<!-- import CSS -->
<link rel="stylesheet" href="element-ui/lib/theme-chalk/index.css">
<!-- import Vue before Element -->
<script src="vue.min.js"></script>
<!-- import JavaScript -->
<script src="element-ui/lib/index.js"></script>

2、编写html

<div id="app">
     <el-button @click="visible = true">Button</el-button>
    <el-dialog :visible.sync="visible" title="Hello world">
         <p>Try Element</p>
     </el-dialog>
</div>

关于.sync的扩展阅读 https://www.jianshu.com/p/d42c508ea9de

3、编写js

<script>
     new Vue({
         el: '#app',
         data: function () {//定义Vue中data的另一种方式
         	return { visible: false }
         }
     })
</script>
posted @ 2021-07-29 08:46  Coder-Wang  阅读(80)  评论(0编辑  收藏  举报