慕课网Vue基础知识学习笔记

慕课网Vue基础知识学习

1.基础知识

  • 挂载点: el对应的id
  • 模板:指的就是挂载点DOM内部的标签内容,可以在Vue实例中,设置template属性值;
  • 实例参数:
    • new Vue({}):Vue实例调用,参数为对象;
    • 对象中的变量:
      • 1)el: 赋值为id值,作为挂载点,绑定DOM标签中的元素;如el: "#root";
      • 2)template:模板;赋值为字符串类型,即作为挂载点DOM标签下的内容;若不设置该属性,则在挂载点DOM标签下的内容,作为该实例模板;
      • 3)data:赋值为对象,对象中为变量键值对;用来插入到挂载点对应的DOM节点中;
      • 4)methods:赋值为对象,对象中为函数方法键值对;
      • 5)computed:计算属性,赋值为对象,对象中为计算属性设置;用于对data中变量进行计算;
      • 6)watch:侦听器,赋值为对象;监听变量的变化,进而执行对应函数;
      • 7)props:赋值为数组;数组中元素为父级元素设置的自定义属性名,用于传递给子组件参数;
      • 8)components:赋值为对象;设置该Vue实例(组件)的局部组件;局部组件标签名和对象;
  • 基础知识:
    • vue数据绑定的几种方式:内容绑定;事件绑定;标签属性绑定;数据的双向绑定;
    • {{msg}}:插值表达式输出到DOM标签中,插入变量msg的内容;
    • v-text="msg":在该标签中将msg变量的值,作为纯文本插入其中;
    • v-html="msg":在该标签中将msg变量的值,作为内容插入,内容保留html样式;
    • v-on:click="fn"@click="fn":给对应标签绑定事件,此为绑定click点击事件,fn为点击事件触发后执行的函数名;fn定义在实例参数methods中;
      • 注:在webstrom中使用v-on会报错,所以只能用@click="fn"形式绑定事件;
    • 若想修改DOM中的内容,只需改变VUE实例中变量内容,然后VUE会监听到变量的变化,进而修改DOM中的内容;
      • 在Vue实例中使用data中的变量,使用this.变量名调用;
      • 修改实例data中变量的内容,使用this.变量名=xxx;即可改变变量内容,进而改变DOM中的对应内容;
    • v-bind:title="msg":title="msg":标签的属性绑定,即给该标签绑定title属性为标签msg变量值;
      • 注:在webstrom中使用v-bind会报错,所以只能使用:title="msg";
    • v-model="msg":数据的双向绑定;
    • v-show="showto":控制DOM元素的显示与否;其中,showto为变量,值为布尔值,当为true时,会给标签元素添加一个display:block属性;当为false时,会给标签元素添加一个display:none属性;不会影响DOM树结构;
    • v-if="showto:控制DOM元素的存在与否;其中showto为布尔值,为true时,标签存在,为false时,标签删除;与v-show不同的是,会影响DOM结构,会删除标签;
    • v-for="(item,index) of ary:控制一组数据,通过这组数据循环显示在DOM中,根据数组的长度,遍历标签,插入DOM结构中;
      • 注:给遍历的标签设置一个key属性,会提升每一项的性能;key值都不能相同;
  • 验证代码:
    • 数据绑定和事件绑定及模板
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>数据绑定和事件绑定及模板</title>
         <script src="./js/vue.js"></script>
     </head>
     <body>
     <div id="root">
         <div v-text="msg"></div>
         <div v-html="msg"></div>
         <p @click="handleclick">{{tet}}</p>
         <input type="text" v-model="title"/>
         <div :title="title">{{title}}</div>
     </div>
     <script>
         new Vue({
             el:"#root",
             data: {
                 msg:"<span>hello world</span>",
                 tet:"点击我",
                 title:"这是一个世界的美好"
             },
             methods:{
                 handleclick:function () {
                     //点击事件触发,修改tet内容
                     this.tet="已点击"
                 }
             }
         })
     </script>
     </body>
     </html>
    
    • 计算属性和侦听器
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>计算属性和侦听器</title>
         <script src="./js/vue.js"></script>
     </head>
     <body>
     <div id="root">
         姓:<input type="text" v-model="firstName"/>
         名:<input type="text" v-model="lastName"/>
         <p>{{fullName}}</p>
         <p>{{count}}</p>
     </div>
     <script>
         new Vue({
             //挂载点
             el:"#root",
             //设置变量
             data:{
                 firstName:"",
                 lastName:"",
                 count: 0
             },
             //设置绑定的事件函数
             methods:{
     
             },
             //设置计算属性;
             computed:{
                 fullName:function () {
                     return this.firstName+"和"+this.lastName;
                 }
             },
             //设置侦听器,侦听变量的变化
             watch:{
                 firstName:function () {
                     this.count++;
                 },
                 lastName:function () {
                     this.count--;
                 }
             }
         })
     </script>
     </body>
     </html>
    
    • 模板指令:v-if,v-show,v-for
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>验证</title>
         <script src="./js/vue.js"></script>
     </head>
     <body>
     <div id="root">
         <div v-if="show">标签的存在和删除</div>
         <div v-show="show">标签显示和隐藏</div>
         <button @click="handletoggle">toggle</button>
         <ul>
             <li v-for="(item,index) of textList" :key="index">{{item}}</li>
         </ul>
     </div>
     <script>
         new Vue({
             el:"#root",
             data:{
                 show: true,
                 textList:["meihao","tiankong","nihao"]
             },
             methods:{
                 handletoggle:function () {
                     this.show=!this.show;
                 }
             }
         })
     </script>
     </body>
     </html>
    
  • todoList小实例
    • 代码:
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>todoList</title>
         <script src="./js/vue.js"></script>
         <style>
             html,body{
                 font-size: 30px;
             }
         </style>
     </head>
     <body>
     <div id="root">
         <div>
             <input type="text" v-model="inputValue"/>
             <button @click="btnClick">添加到列表显示</button>
         </div>
         <ul>
             <li v-for="(item, index) of listAry" :key="index">{{item}}</li>
         </ul>
     </div>
     <script>
         new Vue({
             el: "#root",
             data:{
                 inputValue:"",
                 listAry:[]
             },
             methods:{
                 btnClick:function () {
                     this.listAry.push(this.inputValue);
                     this.inputValue="";
                 }
             }
         })
     </script>
     </body>
     </html>
    

2.组件与实例

  • 组件和实例的关系
    • 关系:每一个组件都是一个Vue实例,一个Vue项目是通过多个Vue实例组成的;
    • 在局部组件中,可以设置methods,computed等属性,即与Vue实例中的属性设置相同;
  • 组件的创建和调用
    • 全局组件的定义:
      • 定义:调用Vue类的静态方法component,创建全局组件
        • 代码Vue.component("todo-list",{ template:"<li>xxx</li>" })
      • 调用:使用的todo-list标签插入DOM使用;
    • 局部组件
      • 定义:通过创建变量,变量值为对象,对象中设置template属性,作为局部组件的DOM模板;
      • 调用:局部组件要在vue实例中调用,必须在实例中进行声明注册;即在components属性中设置局部组件调用的标签名,注:标签名不能大写;
    • 代码:
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>组件的定义和调用</title>
         <script src="./js/vue.js"></script>
         <style>
             html,body{
                 font-size: 30px;
             }
         </style>
     </head>
     <body>
     <div id="root">
         <div>
             <input type="text" v-model="inputValue"/>
             <button @click="btnClick">添加到列表显示</button>
         </div>
         <ul>
             <!--全局组件的调用-->
             <todo-item></todo-item>
             <!--局部组件的调用-->
             <do-list></do-list>
         </ul>
     </div>
     <script>
         //全局组件定义
         Vue.component("todo-item",{
             template:"<li>meihao</li>"
         });
         //局部组件定义,局部组件使用父组件传递的参数
         var sonItem={
             template:"<li>meili</li>"
         };
         //实例创建 
         new Vue({
             el: "#root",
             //局部组件的声明,声明的name不能大写,加引号;
             components:{
                 "do-list":sonItem
             },
             data:{
                 inputValue:"",
                 listAry:[]
             },
             methods:{
                 btnClick:function () {
                     this.listAry.push(this.inputValue);
                     this.inputValue="";
                 }
             }
         })
     </script>
     </body>
     </html>
    
  • 父组件与子组件之间传递数据
    • 父组件向子组件传递数据:通过在子组件上设置自定义属性,来传递参数;
      • 父组件:定义传递给子组件的变量参数;
      • 子组件:
        • 子组件标签中设置自定义属性,属性值为父组件传递给子组件的参数值;
        • 子组件实例对象中设置props属性,属性值为数组,数组元素为子组件标签上设置的自定义属性名;
        • 在子组件template模板中,在标签中,通过{{}}插入props接收的自定义属性名,进而获取父级组件传递的参数;
        • 设置了props属性后,相当于给子组件设置了两个data变量;可以在对象中通过this.自定义属性名获取传递的参数;但是,若修改传递的参数,会报错;
    • 子组件向父组件传递数据参数
      • 子组件通过订阅发布的形式向父组件传递数据;
      • 父组件通过给子组件标签设置自定义属性,属性值为函数体;
      • 子组件通过事件触发后,在函数体内调用执行父组件传递来的函数体,并向其传递子组件中的数据,进而在父组件中获取到该数据;然后进行其他操作;
    • 代码:
     <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>父组件与子组件之间传递参数实例</title>
         <script src="./js/vue.js"></script>
         <style>
             html,body{
                 font-size: 30px;
             }
         </style>
     </head>
     <body>
     <div id="root">
         <!--root挂载点下的所有标签,作为父级组件的模板-->
         <div>
             <input type="text" v-model="inputValue"/>
             <button @click="btnClick">添加到列表显示</button>
         </div>
         <ul>
             <!--其中todo-item作为子组件,绑定标签自定义属性,传递父级组件变量item-->
             <todo-item v-for="(item,index) of listAry" :key="index" :content="item" :index="index" :sondata="sonClick"></todo-item>
         </ul>
     </div>
     <script>
         Vue.component("todo-item",{
             props: ["content","index","sondata"],
             //在子组件模板中调用content,即获取父级组件传递的参数
             //在子组件模板中绑定自己的click事件,触发后,执行父组件传递的函数体,并传递数据;
             template:"<li @click='deleteData'>{{content}}</li>",
             methods:{
                 deleteData:function () {
                     this.sondata(this.index);
                 }
             }
         });
         new Vue({
             el: "#root",
             data:{
                 inputValue:"",
                 listAry:[]
             },
             methods:{
                 btnClick:function () {
                     this.listAry.push(this.inputValue);
                     this.inputValue="";
                 },
                 //创建父组件向子组件传递的函数体,接收子组件传递的数据
                 sonClick:function (index) {
                     this.listAry.splice(index,1);
                 }
             }
         })
     </script>
     </body>
     </html>
    

Vue-cli插件

  • Vue-cli(2.x)旧版安装与使用
    • 前提:下载node.js
    • 命令:
      • 1)全局安装:npm install --global vue-cli;下载的版本为旧版本2.x;
        • 卸载:npm uninstall -g vue-cli;
      • 2)创建一个基于webpack模板的新项目:vue init webpack my-project
      • 3)安装完毕后,进入创建的项目文件:cd my-project
      • 4)运行服务器:npm run dev
    • 注意:创建webpack模板项目时,不要使用eslint规则校验代码,否则会出警告;
  • Vue-cli的全局样式和局部样式
    • 在vue的组件中,style标签后设置scoped局部作用域标识符,为局部样式,代表指作用于该组件的样式;如果去掉标识符,为全局样式,则作用于所有组件,包括父级组件;
  • 参考链接:慕课网vue2.5入门知识解读
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,335评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,895评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,766评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,918评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,042评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,169评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,219评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,976评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,393评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,711评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,876评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,562评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,193评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,903评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,699评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,764评论 2 351

推荐阅读更多精彩内容

  • Vue 实例 属性和方法 每个 Vue 实例都会代理其 data 对象里所有的属性:var data = { a:...
    云之外阅读 2,204评论 0 6
  • 组件(Component)是Vue.js最核心的功能,也是整个架构设计最精彩的地方,当然也是最难掌握的。...
    六个周阅读 5,590评论 0 32
  • 第一章 Vue概述 what? Vue是实现UI层的渐进式js框架,核心库关注视图层,简单的ui构建,复杂的路由控...
    fastwe阅读 712评论 0 0
  • VUE介绍 Vue的特点构建用户界面,只关注View层简单易学,简洁、轻量、快速渐进式框架 框架VS库库,是一封装...
    多多酱_DuoDuo_阅读 2,692评论 1 17
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 7,198评论 0 25