vue初探

vue初探

  很多同学一定都听过MVVM、组件、数据绑定之类的专业术语,而vue框架正是这样的一种框架。vue的作用是:通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

  

第一部分:vue介绍与使用

  话不多说,我们先来看一看最简单的vue是怎么使用的。实际上,我们只需要引入一个js文件即可(当然,这只是一种相对简单的方法,还有其他的方法),这个js文件即对vue的封装。下面的例子可以输出hello world。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
    <div id="example">
        {{message}}
    </div>
    <script>
        var example=new Vue({
            el:‘#example‘,
            data:{
                message: "hello word"
            }
        });
    </script>
</body>
</html>

   

  其中,我们可以看到{{message}}这实际上类似于模版字符串,其中的message为模版,我们在js文件中可以给其设置值。注意:这里{{}}是两个大括号,并且这里既然看作了一个模版,终究会被字符串所代替,所以没有加分号,它不是语句。比如,我们还可以写成:

    <div id="example">
       哈哈, {{message}} 是模版字符串
    </div>

  即{{message}}可以穿插在任何地方,而不需要

  另外,我们可以看到var example = new Vue();这个语句实际上是创建了一个Vue的实例对象,显然这个Vue构造函数是已经封装好的,我们直接使用即可。注意:正因为Vue是构造函数,所以Vue中的V要大写!

  且Vue中可以接收一个JSON字符串,所以我们在圆括号里是一个{}。而el是element的缩写,我们把el的值写成# . 等形式来获取dom元素,这一点和jQuery非常像,而data又是一个JSON字符串,我们这时可以给message赋任意想要的值,注意:这里的message还可以写成其他任意的形式如mes等。而< div id="example" >也可以写成 <div class="example">或<div>,在js中只需要使用el:".example"和"div"分别来引用即可。

  这样,一个最简答的vue例子就做出来了。并且这还是响应式的,也就是vue中的双向数据绑定,为什么这样说呢?因为vue是一款MVVM框架,M表示Module是数据的意思(属于js),V表示View是视图的意思(属于html)。

第二部分:vue中的指令( v-bind、v-if、v-for、v-on)

   我们知道我们可以通过在div内部显示文本处添加{{message}}再通过js来添加模版,但是如果我们希望这个模版作为一个属性值存在于一个div的title属性中,我们可以通过<div title="message">的方式吗?  答案是否定的,大家可以自行尝试。这时,我们就需要使用vue中的v-bind了。举例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
    <div v-bind:title="message" >
        使用鼠标划过我哦
    </div>
    <script>
        var example=new Vue({
            el:‘div‘,
            data:{
                message: "我是通过指令被绑定的"
            }
        });
    </script>
</body>
</html>

  这个v-bind即称为指令,它带有前缀 v- ,dfjfafdf

 显然,这表示它是由Vue.js提供的特殊的属性。意思是:将元素节点的title属性和Vue实例的message属性绑定到一起。于是,我们可以通过修改message来修改title属性的值。

  

  当然,vue中的指令绝不仅限于此,v-if就是一个判断指令,用于控制显示可隐藏之间的切换。举例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
    <div v-if="seen">
        哈哈,我会根据v-if的判断来显示或者隐藏。
    </div>
    <script>
        var example=new Vue({
            el:‘div‘,
            data:{
                seen:true
            }
        });
    </script>
</body>
</html>

  这里,我们给div添加特殊属性v-if,其值为seen。而在Vue中的data下的seen设置位true,这时我们就可以在浏览器中看到该div的内容。但是如果我们在控制台中输入example.seen=false那么div的内容就会被隐藏。如下所示:

 值得注意的是:这里最为重要的是判断v-if的值的值是否为true,而v-if的值的名称是无关紧要的,也就是说,我们可以写成v-if="hah",在Vue中的data里,只要改成hah:true即可,效果相同。

  还有一个常用的指令v-for,它可以绑定数据到数组来渲染一个列表。举例如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
    <div>
        <p v-for="person in people">
            {{person.name}}
        </p>
    </div>
    <script>
        var example=new Vue({
            el:‘div‘,
            data:{
                people:[
                        {name:‘zzw‘},
                        {name:‘htt‘},
                        {name:‘aini‘}
                    ]
            }
        });
    </script>
</body>
</html>

  最终效果如下所示:

  而关于v-for指定的使用,有以下几点需要注意:

  1. 添加v-for指令的元素节点一定不能是body的直接子元素,也就是说,该元素之外必须要有其他元素,这样,这个元素才能在某一个元素内(有v-for属性元素的父元素)全部列举出来。
  2. 在Vue中el的值,一定是有v-for属性的父元素,因为我们需要在这个父元素内全部列举。
  3. 我们可以看到,之前的几个例子包括这个例子,data的数据格式都是JSON字符串,而JSON中的people可以是数组,且既然用到了v-for列举,那么一定是数组被列举
  4. 我们在控制台输入example.people.push({name:‘Jack‘})之后我们就可以看到在原来的基础上多显示了一行Jack。

  

  当然,如果我们希望用户能和我们的应用互动,那么我们需要使用v-on添加一个监听事件来调用我们在Vue实例中的方法。如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
    <style>
        .string{color:red;}
    </style>
</head>
<body>
    <div>
        <p>点击按钮,下面的文字将会反转</p>
        <p class="string">{{message}}</p>
        <button v-on:click="reverseMessage">反转</button>
    </div>
    <script>
        var example = new Vue({
            el:‘div‘,
            data:{
                message:‘i like coding‘
            },
            methods:{
                reverseMessage:function(){
                    this.message=this.message.split("").reverse().join("")
                }
            }
        })
    </script>
</body>
</html>

  效果如下所示:

  对于v-on指定我们需要注意以下几点:

  1. 当有关Vue的使用只在一个元素时,el对应的就是这个元素;如果有关Vue的有多个元素,那么Vue实例中的el所对应的元素就是包含这多个元素的父元素。如本例所示。
  2. 这里,我们看到了method的使用,而之前只使用过el和data。
  3. split()方法可以将字符串分解为数组,如果是split("")则会把所有的字符都分成数组。

  

  而如果我们希望将应用状态和表单同时双向数据绑定,这时我们就需要使用v-model指令了。举例如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
    <div>
        <p>{{message}}</p>
        <input type="text" v-model="message">
    </div>
    <script>
        var example = new Vue({
            el:‘div‘,
            data:{
                message:‘hello world‘
            }
        });
    </script>
</body>
</html>

  效果如下所示:

  当然,我们也可以使用如同title例子所将的v-bind指令,如<input type="text" v-bind:value="message">。

第三部分:组件化  

  组件系统是Vue.js中的一个非常重要的概念,因为它提供了一种抽象,让我们可以通过独立可重复的小组件来构建大型应用,如果我们考虑到这点,几乎任意类型的应用的界面都可以抽象成一个组件树。

  那么怎么构建一个组件呢?大体思路如下所示:

    <div>
        <ol>
            <comp></comp>
            <comp></comp>
            <comp></comp>
        </ol>
    </div>
    <script>
        Vue.component(‘comp‘,{template:‘<li>helloword</li>‘});
    </script>

  但是我们可以发现一个问题,就是这样得到的comp都是重复的,是没有意义的,那么怎么让这个组件可以变动呢?于是Vue给component方法提供了另一个参数props,举例如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>vue</title>
    <script src="https://unpkg.com/vue/dist/vue.js"></script>
</head>
<body>
    <div>
        <ol>
            <comp v-for="person in people" v-bind:item="person"></comp>
        </ol>
    </div>
    <script>
        Vue.component(‘comp‘,{props:[‘item‘],template:‘<li>{{item.name}}</li>‘});
        var example=new Vue({
            el:‘div‘,
            data:{
                people:[
                {name:‘zzw‘},
                {name:‘htt‘},
                {name:‘love‘},
                ]
            }
        });
    </script>
</body>
</html>

   这里利用了组件component,但是为了不重复,这里就使用了v-for指令,并且将person绑定到每个comp的item属性上,这样组件就是变化的了。另外还需要注意的是component方法的第二个参数props的值是一个数组,因为这样组件中就可以包括不只一种的变动的量,这样的功能才更强大。

  注:这里记录的vue学习笔记主要参自中文官方文档

  

  ,

时间: 2024-10-09 18:36:05

vue初探的相关文章

【Vue】Vue初探

从去年年底到现在,陆续接触了React.Backbone等前端框架以及NodeJs等相关前端知识.不得不说现在前端发展太快了.以前我们还在为选择用哪种编程语言而烦恼,现在前端领域已经在为使用哪种框架而烦恼. 最近刚刚开始接触Vue,立马就被它惊艳到了.原来不过是一个国人自行研发的框架,比不上React.AG等有国际大厂背书的框架,但是它站在诸多框架的肩膀上,去芜存菁,以最小的体格绽烁出惊艳的优点. 1.体积小,2.0版本的min版体积小到20几k. 2.数据双向绑定.省去许多View和Model

Vue.js 入门指南之“前传”(含sublime text 3 配置)

题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴级别”的前端开发人员,大牛请绕过. 1,下载安装Node.js 去 Node.js 官网下载一个Windows环节的安装包 node-v6.2.0-x64.rar 文件,一路安装下去即可.官网访问很慢,可以试试中文网 http://nodejs.cn/ 2,配置Vue环境 一开始看<基于Webpac

Vue.js 入门指南之“前传”

题记:关注Vue.js 很久了,但就是没有动手写过一行代码,今天准备入手,却发现自己比菜鸟还菜,于是四方寻找大牛指点,才终于找到了入门的“入门”,就算是“入门指南”的“前传”吧.此文献给跟我一样“白痴级别”的前端开发人员,大牛请绕过. 1,下载安装Node.js 去 Node.js 官网下载一个Windows环节的安装包 node-v6.2.0-x64.rar 文件,一路安装下去即可.官网访问很慢,可以试试中文网 http://nodejs.cn/ 2,配置Vue环境 一开始看<基于Webpac

从壹开始前后端分离【 .NET Core2.0 Api + Vue 3.0 + AOP + 分布式】框架之九 || 依赖注入IoC学习 + AOP界面编程初探

代码已上传Github,文末有地址 说接上文,上回说到了<从壹开始前后端分离[ .NET Core2.0 Api + Vue 2.0 + AOP + 分布式]框架之八 || API项目整体搭建 6.3 异步泛型+依赖注入初探>,后来的标题中,我把仓储两个字给去掉了,因为好像大家对这个模式很有不同的看法,嗯~可能还是我学艺不精,没有说到其中的好处,现在在学DDD领域驱动设计相关资料,有了好的灵感再给大家分享吧. 到目前为止我们的项目已经有了基本的雏形,后端其实已经可以搭建自己的接口列表了,框架已

vue 生命周期初探

vue 以后发之势加上其独有的特性(压缩后很小),轻量级的MVVM框架,目前github star已有5.94万,而react 7万.由此可见是两个非常热门前端框架.这里就vue的生命周期做个初步体验. 发现看视频,动手之后,过段时间还是会忘,所以写一篇短文以备不时之需. 先附上官网的图片:vue生命周期 生命周期的钩子函数如果使用得当,会大大增加开发效率: 生命周期实践: 为了更好的查看beforeUpdate.updated,beforeDestroy,destroy钩子函数,使用v-on绑

初探Vue

Vue.js(读音/vju:/,类似于view),是近来比较火的前端框架,但一直没有怎么具体了解.实现过,就知道个啥的MVVM啦,数据驱动啦,等这些关于Vue的虚概念. 由于最近,小生在公司中,负责开发完一个关于管理下载文件的进度器后,其中大量数据变动,带来的原生DOM操作,让我想到了最近热门的Vue. 嘿,丫的既然是数据驱动,正好,我何不用你Vue来实现同样的功能,切身感受下你丫的过人之处呢. 于是乎,小生就在私底下用Vue又实现了遍同样的功能,感受就是,丫的还不错哦,数据驱动不赖嘛. 好了,

微信小程序之初探(常见语法 VS vue)常见问题(点击不生效,数据绑定)

最近在调研微信小程序开发,对于一个前端小白来说,在各种框架都还用不熟的情况下,再来开发小程序确实还是不容易. 小程序出来之初,听过演讲,看过一点点儿视频,感觉和angular语法有点相似(PS:那是也是只了解一点点儿angular语法): 近两天开始尝试开发小程序,讲真,语法和angular和vue都很相似,小程序提供的语法现在还算全面,很多方法都有提供: 下面简述一下常用方法的使用: 一:数据绑定: html js 直接把数据写在data里面就行了,这样数据可以直接渲染到页面上, 那么问题来了

Vue源码终笔-VNode更新与diff算法初探

写完这个就差不多了,准备干新项目了. 确实挺不擅长写东西,感觉都是罗列代码写点注释的感觉,这篇就简单阐述一下数据变动时DOM是如何更新的,主要讲解下其中的diff算法. 先来个正常的html模板: <body> <div id='app'> <div v-for="item in items">{{item}}</div> <div @click='click'>click me!</div> </div&g

Vue.js初探

在Vue.js的初识篇了解了Vue的内部指令,并做了一些简单的小案例。这一篇来了解Vue的全局API。 Vue的全局API:在构造器外部用Vue提供的API函数来定义新功能。 首先了解一下自定义指令的生命å‘