Vue学习(一)概念及常见命令介绍

Vue.js介绍

这里写图片描述
Vue.js是JavaScript MVVM(Model-View-ViewModel)库,十分简洁,Vue核心只关注视图层,相对AngularJS提供更加简洁、易于理解的API。Vue尽可能通过简单的API实现响应的数据绑定和组合的视图组件。

Vue和MVVM模式

这里写图片描述
MVVM模式即Model-View-ViewModel。

Vue是以数据为驱动的,Vue自身将DOM和数据进行绑定,一旦创建绑定,DOM和数据将保持同步,每当数据发生变化,DOM会跟着变化。

ViewModel是Vue的核心,它是Vue的一个实例。Vue实例时作用域某个HTML元素上的,这个HTML元素可以是body,也可以是某个id所指代的元素。

DOM Listeners和Data Bindings是实现双向绑定的关键。DOM Listeners监听页面所有View层DOM元素的变化,当发生变化,Model层的数据随之变化;Data Bindings监听Model层的数据,当数据发生变化,View层的DOM元素随之变化。

Vue.js特点

  • 简洁:页面由HTML模板+Json数据+Vue实例组成
  • 数据驱动:自动计算属性和追踪依赖的模板表达式
  • 组件化:用可复用、解耦的组件来构造页面
  • 轻量:代码量小,不依赖其他库
  • 快速:精确有效批量DOM更新
  • 模板友好:可通过npm,bower等多种方式安装,很容易融入

Vue.js入门小例子

声明式渲染

本例子由HTML模板(View)+Json数据(Model)+Vue实例(ViewModel)组成。

创建Vue的实例,需传入一个选项对象,如:数据、挂载元素、方法、模生命周期钩子等。本例子中,选项对象的el属性为#app,表示Vue实例挂载在<div id="app">...</div>元素上,data属性为exampleData,表示Model为exampleData。View中{{message}}是Vue的一种数据绑定语法,在运行时,{{message}}会被数据对象的message属性替换。

<!DOCTYPE html>
<html>
    <head>
        <title>声明式渲染</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>        
    </head>
    <body>
        <!-- View -->
        <div id="app">
            {{message}}
        </div>
        <script>
            //Model
            var exampleData = {
                message: 'Hello Vue!'
            }
            //ViewModel
            var app = new Vue({
                el: '#app',
                data: exampleData
            })
        </script>
    </body>
</html>

双向绑定

在Vue中使用v-model在表单元素上实现双向绑定。当在输入框输入的信息发生变化,<p>...</p>中的信息随之变化;当通过控制台中的Console,修改exampleData.message的值,输入框中的信息也随之变化。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>双向绑定</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <!-- View -->
        <div id="app">
            <p>{{message}}</p>
            <input type="text" v-model="message">
        </div>
        <script>
            //Model
            var exampleData = {
                message: 'Hello Vue!'
            }
            //ViewModel
            var app = new Vue({
                el: '#app',
                data: exampleData
            })
        </script>
    </body>
</html>

运行截图:

这里写图片描述

更改exampleData.message
这里写图片描述

Vue.js常用指令

Vue指令以v-开头,作用在HTML元素上,将指令绑定在元素上时,会给绑定的元素添加一些特殊行为,可将指令视作特殊的HTML属性(attribute)。

下面将介绍Vue中常用的几个内置指令。当然,Vue除了内置指令,也可以根据需求自定义指令。

v-if指令

条件判断指令,根据表达式值的真假来插入或删除元素,表达式返回一个布尔值,语法如下:

v-if = "expression"

例子:

在本例中,表达式是yesno,和age>25yes的值为true,因此在HTML中显示该元素,其他同理。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>v-if指令</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-if="yes">Yes</h1>
            <h1 v-if="no">No</h1>
            <h1 v-if="age > 25">Age: {{age}}</h1>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    yes: true,//值为真,插入元素
                    no: false,//值为假,不插入元素
                    age: 28
                }
            })
        </script>
    </body>
</html>

运行截图:

这里写图片描述

v-show指令

条件渲染指令,与v-if不同的是,无论v-show的值为truefalse,元素都会存在于HTML代码中;而只有当v-if的值为true,元素才会存在于HTML代码中。v-show指令只是设置了元素CSS的style值。语法如下:

v-show = "expression"

例子:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>v-show指令</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <h1 v-show="yes">Yes</h1>
            <h1 v-show="no">No</h1>
            <h1 v-show="age > 25">Age: {{age}}</h1>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    yes: true,//值为真
                    no: false,//值为假
                    age: 28
                }
            })
        </script>
    </body>
</html>

运行截图:
这里写图片描述

v-else指令

可配合v-if或v-show使用,v-else指令必须紧邻v-if或v-show,否则该命令无法正常工作。v-else绑定的元素能否渲染在HTML中,取决于前面使用的是v-if还是v-show。若前面使用的是v-if,且v-if值为true,则v-else元素不会渲染;若前面使用的是v-show,且v-show值为true,则v-else元素仍会渲染到HTML。

v-for指令

循环指令,基于一个数组渲染一个列表,与JavaScript遍历类似,语法如下:

v-for = "item in items"

例子:

在本例中,数组是todos,依次遍历数组todos中的每个元素,将text部分显示。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>v-for指令</title>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <ol>
                <li v-for="todo in todos">{{todo.text}}</li>
            </ol>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    todos: [
                        {text: 'learn Javascript'},
                        {text: 'learn Vue'},
                        {text: 'learn ...'}
                    ]
                }
            })
        </script>
    </body>
</html>

运行截图:

这里写图片描述

在浏览器控制台里Console,输入app.todos.push({text: 'new item'}),则会插入新的一条信息。

运行截图:
这里写图片描述

v-bind指令

给DOM绑定元素属性,语法如下:

v-bind:argument="expression"

其中,argument通常是HTML元素的特性,如:v-bind:class="expression"

注:v-bind指令可以缩写为:冒号。如::class="expression"

例子:

在本例子中,当鼠标悬停在span标签的文字上时,会显示加载网页的时间。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <span v-bind:title="message">Hover your mouse over me</span>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    message: 'you loaded this page on ' + new Date()
                }
            })
        </script>
    </body>
</html>

v-on指令

用于监听DOM事件,语法与v-bind类似,如监听点击事件v-on:click="doSth"

注:v-on指令可以缩写为@符号。如:@click="doSth"

例子:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p><input type="text" v-model="message"></p>
            <p>
                <button v-on:click="greet">Greet</button>
            </p>
            <p>
                <button v-on:click="say('hello vue')">Hello</button>
            </p>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    message: 'Greet to Vue'
                },
                methods: {
                    greet: function(){
                        alert(this.message);
                    },
                    say: function(msg){
                        alert(msg);
                    }
                }
            })
        </script>
    </body>
</html>

运行结果:
这里写图片描述

一个综合性例子

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <script src="https://unpkg.com/vue/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <fieldset>
                <legend>Create New</legend>

                <label for="">Name:</label>
                <input type="text" v-model="newPerson.name">

                <label for="">Age:</label>
                <input type="text" v-model="newPerson.age">

                <label for="">Age:</label>
                <select name="" id="" v-model="newPerson.sex">
                    <option value="Male">Male</option>
                    <option value="Female">Female</option>
                </select>

                <button @click="createPerson">Create</button>
            </fieldset>
            <table>
                <tr>
                    <th>Name</th>
                    <th>Age</th>
                    <th>Sex</th>
                    <th>Delete</th>
                </tr>
                <tr v-for="person in people">
                    <td>{{person.name}}</td>
                    <td>{{person.age}}</td>
                    <td>{{person.sex}}</td>
                    <td><button @click="deletePerson($index)">Delete</button></td>
                </tr>
            </table>
        </div>
        <script>
            var app = new Vue({
                el: '#app',
                data: {
                    newPerson: {
                        name: '',
                        age: 0,
                        sex: 'Male'
                    },
                    people: [{
                        name: 'tyy',
                        age: 24,
                        sex: 'Male'
                    }, {
                        name: 'syd',
                        age: 24,
                        sex: 'Female'
                    }]
                },
                methods: {
                    createPerson: function(){
                        this.people.push(this.newPerson);
                        this.newPerson = {
                            name: '',
                            age: 0,
                            sex: 'Male'
                        }
                    },
                    deletePerson: function(index){
                        this.people.splice(index, 1);
                    }
                }
            })
        </script>
    </body>
</html>

运行截图:

这里写图片描述

参考链接

  1. [Vue.js——60分钟快速入门](http://www.cnblogs.com/keepfool/p/5619070.html)
  2. 介绍Vue.js
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴回答你的问题。作为一个 AI 语言模型,我没有实际的经验来记录日记。但是,我可以告诉你,Vue 是一个流行的 JavaScript 框架,它可以帮助开发人员构建交互式的 Web 应用程序。Vue 具有简单易学、灵活性强、性能优异等优点,因此在开发中得到了广泛的应用。如果你有任何关于 Vue 开发的具体问题,我很乐意帮助你解答。 ### 回答2: 第一天: 今天开始了一周的vue开发。首先,我花了一些时间了解了一下vue的基本概念和语法规则。我了解到vue是一个渐进式的JavaScript框架,它可以用于构建用户界面。我通过阅读官方文档和参考一些教程来学习如何使用vue。初步了解了vue的组件化开发和数据绑定的概念。 第二天: 今天,我决定尝试一下使用vue来构建一个简单的ToDo列表应用程序。我创建了一个vue项目,并在主组件中定义了一些数据和方法。然后,我使用v-for指令来遍历数据,并使用v-bind指令实现了数据的双向绑定。我还添加了一些样式来美化界面。整个过程相对顺利,虽然在处理一些细节时遇到了一些问题,但最终成功完成了ToDo列表应用。 第三天: 今天我决定学习一下vue的路由功能。我在项目中引入了vue-router,并创建了一些路由组件。然后我定义了一些路由规则,并在主组件中使用<router-view>显示当前路由对应的组件。我还添加了一些导航链接,并用router-link指令实现了路由的切换。学习路由功能过程中遇到了一些语法和配置问题,但最终解决了。 第四天: 今天我开始学习vue的状态管理功能。我在项目中引入了vuex,并创建了一些状态和mutations。然后我在主组件中使用mapState和mapMutations辅助函数来访问和修改状态。学习状态管理的过程中,我发现了vuex的一些特性,比如模块化和插件化,并尝试使用这些特性来简化代码结构。 第五天: 今天我专注于学习vue的动画功能。我在项目中引入了vue的动画模块,并尝试了一些基本的动画效果,如淡入淡出和滑动效果。我还了解到了过渡和动态组件的概念,并尝试通过vue的transition和transition-group组件实现了这些效果。学习动画功能让我的应用程序变得更加生动和有趣。 第六天: 今天我决定学习vue的性能优化技巧。我通过懒加载和按需加载等技术来优化我的应用程序的加载速度。我还使用vue-devtools工具来分析和优化组件的性能。学习性能优化的过程中,我了解到了一些常见的优化策略,如减少不必要的重新渲染和合理使用计算属性等。 第七天: 今天是我这一周的vue开发的最后一天。我回顾了一下这一周的学习和实践,发现自己在vue的开发中有了很大的进步。我对vue的基本概念和语法有了更深入的了解,也掌握了一些高级功能和优化技巧。我觉得通过这一周的实践,我对vue的开发有了更加扎实的基础,以后可以更好地应用它来构建复杂的应用程序。 ### 回答3: 第一天: 今天开始进行vue开发,首先安装了vue-cli脚手架工具,并创建了一个新的vue项目。然后我使用vue-router插件来搭建了项目的路由系统,可以通过不同的URL来实现页面的跳转。接下来,我创建了几个组件,包括Header、Footer和Home等,并在页面中引入和使用了这些组件。通过组件化的开发方式,我可以更好地管理和复用代码。 第二天: 今天我继续进行vue开发,学习vue的数据绑定和事件绑定。我在组件中创建了一些数据属性,然后在模板中使用双花括号语法将数据和页面进行绑定。并且,我还通过v-on指令绑定了一些事件处理函数,实现了一些交互功能,比如点击按钮触发弹窗等。vue的数据驱动模型让我对整个开发过程更加流畅和高效。 第三天: 今天我开始研究vue的组件通信问题。我学习了父子组件之间的通信方式,包括props和$emit方法,可以实现父组件向子组件传递数据和子组件向父组件发送事件。我还学习了兄弟组件之间的通信方式,可以使用事件总线或者vuex来实现不同组件之间的数据传递和状态管理。掌握了这些通信方式后,我能够更好地组织和管理组件之间的关系。 第四天: 今天我学习vue的生命周期钩子函数。通过对生命周期的理解,我可以在不同阶段进行一些初始化或者清理工作。其中,created和mounted是最常用的两个钩子函数,分别在实例创建之后和实例挂载到页面之后被调用。我可以在这两个钩子函数中进行一些异步数据请求或者DOM操作,确保在渲染之前或之后进行必要的操作。 第五天: 今天我开始学习vue的状态管理模式vuex。在复杂的应用中,组件之间的状态管理变得非常重要,而vuex提供了一个集中式的存储管理方案。我创建了一个vuex的store,包括state、mutations、actions和getters等。通过mutations和actions,我可以对state进行修改,并且可以通过getters获取state中的数据。vuex的使用大大简化了整个应用的状态管理流程。 第六天: 今天我继续进行vue开发,学习了异步组件和动态路由的使用。在项目中,如果有一些组件比较大或者需要懒加载,可以使用异步组件的方式按需加载。我使用了import函数和webpack的代码分割功能来实现异步组件的加载。另外,动态路由可以使得路由的配置更加灵活,可以根据需要动态添加或删除路由配置。这样我可以更好地管理和控制路由。 第七天: 今天是我进行vue开发的最后一天,我进行了项目的打包和部署。通过vue-cli提供的命令,我将项目进行了打包,生成了静态资源文件。然后,我将这些静态资源文件上传到服务器,并配置了nginx代理,使得项目可以通过域名访问。最后,我进行了一些简单的测试和优化,确保项目在生产环境下正常运行。整个vue开发流程结束,我对vue的开发有了更深入的了解。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值