快速入门全站 - 10 Vue.js

一、Vue基础

Vue.js是一个响应式数据驱动的JavaScript框架,可以简化Dom操作。Vue.js的官方网页在https://cn.vuejs.org

我们使用Vue.js需要在<script>中导入资源,可以分为两种

<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>

我们首先实现一个HelloWorld的实例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Hello Vue.js</title>
</head>
<body>
    <div id="app">
        {{message}}
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                message:"Hello Vue.js"
            }
        })
    </script>
</body>
</html>

在<body>项中有三个部分,最中间的<script>部分导入了Vue.js的资源,上面的部分用来显示message的信息,下面的部分来定义一个Vue应用,并对message进行赋值,具体的代码在接下来会详细介绍。

el是一个挂载点,通过CSS选择器设置vue实例管理的元素。在挂载完毕后,el命中的元素,就会被data中同名的数据替换。Vue实例的作用域是在el命中的元素内部,即使嵌套也可以。

同样地,我们使用#app是为了命中外部的id=“app”,我们也可以使用class=“app”,这样需要修改el:".app",也可以直接使用标签选择器el:“div”,但在实际开发中,还是建议直接使用id选择器,因为一般开发的时候,要求id是唯一的,而类和标签选择器都有可能是不唯一的。我们也可以在其他的标签中使用,例如p或者h2等等;但要注意vue无法挂载到<html>和<body>上。

data部分定义了要置换的数据内容。data中可以不止有字符串,也可以定义其他的复杂对象

<script>
    var app = new Vue({
         el:"#app",
         data:{
         	school:{
               name:"NEU",
               location:"沈阳"
            },
            campus:["南湖校区","浑南校区"]
         }
    }
})
</script>

Vue.js会直接打印对象的内容

我们也可以通过school.name的方式来获取属性值。

二、Vue指令

在这一部分我们来介绍Vue指令

1. v-text

v-text指令用来在标签中添加文字,

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <div id="app">
        <h2 v-text="message + '!'"></h2>
        <h2>我想写的是{{message + "!"}}</h2>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                message:"Hello V-text"
            }
        })
    </script>
</body>

我们可以看到,代码中依旧有el挂载点和data。我们可以选择在标签中直接添加v-text属性,或者直接使用嵌套的花括号。第二种的好处是可以直接在花括号周围添加其他字符。我们还可以使用字符连接来添加字符,注意在第一种方式中,我们只能在双引号中使用单引号。

2. v-html

v-html可以设置标签的inner-html。

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <div id="app">
        <p v-html="content"></p>
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                content:"<a href='http://www.baidu.com'>Go Baidu</a>"
            }
        })
    </script>
</body>

v-html指令也可以讲文字打印在网页中,和v-text完全相同。唯一的区别在于,如果在data中赋值的字符串是HTML的结构的话,其内容就会被解析并加载。例如上面的代码中,网页中会有Go Baidu的链接,点击即可跳转到百度搜索的界面。

3. v-on

v-on指令可以为某一元素添加事件。

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <div id="app">
        <input type="button" value="事件绑定" v-on:click="doIt">
        <input type="button" value="事件绑定" v-on:mouseenter="doIt">
        <input type="button" value="事件绑定" v-on:dbclick="doIt">
        <input type="button" value="事件绑定" @dbclick="doIt">
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            methods:{
                doIt:function(){
                    // TODO
                }
            }
        })
    </script>
</body>

我们直接在对应的元素上添加v-on来添加事件,也可以直接通过@来添加事件。当我们想要更改页面中元素的值,我们可以通过this关键字来访问

<body>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <div id="app">
        <h2> {{message}} </h2>
        <input type="button" value="点我" @click="addInfo">
    </div>
    <script>
        var app = new Vue({
            el:"#app",
            data:{
                food:"番茄炒蛋"
            },
            methods:{
                addInfo:function(){
                    this.message += "好好吃!";
                }
            }
        })
    </script>
</body>
4. v-show

v-show指令可以根据表达式的真假,让元素显示或者隐藏。常见的效果比如广告或者遮罩层等等。

<div id="app">
   <img src = "vue.jfif" v-show="isShow">
   <button @click="vanish">点我让图片消失</button>
</div>
<script>
   var app = new Vue({
        el:"#app",
        data:{
            isShow:true
        },
        methods:{
            vanish:function(){
                this.isShow = false;
            }
        }
   })
</script>

按钮会在单击事件触发的情况下执行vanish函数,vanish函数会将isShow变量设置为false,因此图片就会消失了。条件表达式也可以通过引用data中的变量来进行判断,并决定是否要显示图片。

5. v-if

v-if指令也是通过表达式的真假来切换元素的显示和隐藏,但是该指令是直接操纵dom元素。

<div id="app">
    <p v-if="isShow">我是一个p标签</p>
    <button @click="vanish">消失</button>
</div>
<script>
    var app = new Vue({
        el:"#app",
        data:{
            isShow:true
        },
        methods:{
            vanish:function(){
                this.isShow = false;
            }
        }
	})
</script>

我们可以看到v-if的使用方法和v-show没有什么差别。实际上每次修改显示的时候,v-show修改的是元素的样式,而v-if会直接将元素从DOM树中删除,显示的时候再添加回来,修改的是元素。

6. v-bind

v-bind指令可以修改元素的属性

<div id="app">
    <img v-bind:src = "imgSrc">
    <img v-bind:title = "imgTitle + '!!!!'">
    <img v-bind:class = "isActive?'active':''">
    <img v-bind:class = "{active:isActive}">
    <img :class = "{active:isActive}">
</div>
<script>
    var app = new Vue({
        el:"#app",
        data:{
            imgSrc:"vue.jfif",
            imgTitle:"Hello V-Bind",
            isActive:false
        }
    })
</script>

v-bind指令让属性读取data中的变量,变量中可以进行字符串连接,也可以做简单的判断;判断的方式可以使用三元表达式,也可以使用对象的方式。v-bind有简写的方式,可以去掉v-bind,直接在属性前添加冒号。

7. v-for

v-for可以生成要显示的表格

<div id="app">
    <ul>
        <li v-for="(item,index) in arr">
            {{index+1}} - {{item}}
        </li>
        <li v-for="(item,index) in objArr">
            {{index+1}} - {{item.name}}
        </li>
    </ul>
</div>
<script>
    var app = new Vue({
        el:"#app",
        data:{
            arr:["A","B","C","D","E"],
            objArr:[
                {name:"Jack"},
                {name:"Rose"}
            ]
        }
    })
</script>

在表格元素中添加v-for属性,并赋值字符串,字符串中第一个变量是每次循环的变量,可以修改名字,in是关键字,in后的是要遍历的数组。我们还可以获取每次遍历的索引,需要注意的是,遍历的元素和索引要用括号括起来,并且元素在前面,索引在后面。数组中也可以是对象,使用的时候直接访问内部的属性即可。

8. v-on补充

传递自定义参数,事件修饰符

<div id="app">
    <input type="text" @keyup.enter="sayHi"/>
</div>
<script>
    var app = new Vue({
        el:"#app",
        methods:{
           sayHi:function(){
               alert("Hello");
           }
        }
    })
</script>

我们可以通过.操作符来访问事件更多的修饰符,上面的例子是只有点击回车才可以触发事件,更多的事件修饰符可以查看官网

9. v-model

获取和设置表单元素的值(双向数据绑定)

<div id="app">
   <input type="text" v-model="message">
   <h2> {{message}} </h2>
</div>
<script>
    var app = new Vue({
        el:"#app",
        data:{
            message:"Hello V-model"
        }
    })
</script>

当对表单元素添加v-model属性后,需要将data中的一个遍历与表单元素进行绑定,两者之一发生的改变都会引起另一方的改变,因此叫做双向数据绑定。

三、网络编程

在这一部分,我们学习axios网络请求库,并如何把它和vue结合在一起

1. axios基础

在使用之前,我们需要导入axios的资源

<script src = "https://unpkg.com/axios/dist/axios.min.js"></script>

axios通过get方法来获取请求,get方法会返回一个Promise对象,我们使用then来添加回调函数。回调函数需要两个,第一个是成功的回调函数,第二个是异常的回调函数。

axios.get("url?查询字符串").then(function(response){}, function(err){})

同样,axios也有post方法

axios.post("url",{key1:value1,key2:value2}).then(function(response){}, function(err){})
2. axios + vue.js

我们可以把axios的get和post方法写在vue.js的methods中

var app = new Vue({
	el:"app",
	data:{
		joke:"笑话"
	},
	methods:{
		getJokes:function(){
			var that = this;
			axios.get("url").then(function(response){
				that.joke =  response.data;
			}.function(err){});
		}
	}
})

需要注意的是axios中的this会改变,无法访问到data中的数据,因此我们使用一个变量先将this存储下来。

四、vue-cli

Vue-cli是快速构建Vue.js项目的一套命令行工具。

1. vue-cli安装

vue-cli需要node.js,且版本大于6,最好是8。还需要版本大于3的npm和Git。

我们在配置好node.js后,直接输入以下指令即可完成vue-cli的安装

npm install -g vue-cli
2. 创建vue-cli项目

我们可以在终端中修改路径到目标文件夹,之后输入以下指令

vue init webpack hello

webpack指定的是打包的方式,hello是项目的名称。再按下回车后,会出现一系列交互,在修改后可以按回车确认

  • 项目名称
  • 项目描述
  • 项目作者
  • Vue Build
  • 安装Vue-Router
  • 是否使用EsLint
  • 是否设置单元测试
  • 是否用NightWatch设置e2e测试
  • 是否在项目创建后运行npm install

如果你不知道如何设置的话,直接回车选择默认值即可。当看到Project initialization finished即代表初始化完成。

3. 项目结构

我们来查看一下项目中生成的文件结构

hello  // 项目名称
	-build  // 用来使用Webpack打包使用Build依赖
	-config  // 用来做项目配置
	-node_modules  // 用来管理项目中使用的依赖
	-src // 存储Vue.js的代码[重点]
	    assets  // 存放静态资源[重点]
	    components // 存放Vue组件[重点]
	    router // 配置项目路由[重点]
	    App.vue  // 项目中根组件[重点]
	    main.js  // 项目中主入口[重点]
	-static // 其他静态文件
		- babelrc  // 将es6语法转为es5运行
		- editorconfig  // 项目编辑配置
		- gitignore  // git忽略文件
		- postcssrc.js  // css兼容性处理
		- index.html  // 项目主页
		- package.json  // 依赖管理,类似于Maven的pom.xml,使用命令,不建议手动修改
		- package-lock.json  // 对package.json的加锁文件
		- README.md  // 说明文件
4. 运行项目

要运行项目,则切换到项目根目录下,并直接输入

npm start dev

启动后,通过返回的URL即可访问网页,默认端口为8081。

启动后默认显示的是App.vue下的代码,可以在template的div中看到代码中使用<router-view/>加载了路由,加载的是Components下的HelloWorld.vue的内容。

5. 开发方式

Vue-cli的重点在src文件夹下,在vue-cli中,一切皆组件。在一个组件中,只有js代码、html代码和css。Vue-cli中是开发组件来对应每个业务模块,日后可以将多个业务组件组合到一起形成一个前端系统。日后在使用Vue-cli开发时,不再新建html文件,而是编写vue组件,在之后打包时,vue-cli会将组件编译成运行的html文件。

main.js是前端的入口,在这里定义了App,并且挂载在index.html中。但是Vue.js并不建议我们直接在这里添加组件,而是在components下开发我们自己的组件,并通过路由来从主页访问我们的组件。路由在router文件夹下的index.js文件中,我们通过在该文件的routes中添加组件信息来实现路由访问。

参考资料

[1] 前端基础必会教程-4小时带你快速入门vue
[2] Vue脚手架的实战教程,已完结


我和几位大佬建立了一个微信公众号,欢迎关注后查看更多技术干货文章
欢迎加入交流群QQ1107710098
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章