Vue 知识体系

第一个Vue程序(入门)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 开发版本,未压缩 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <!-- vue简介 响应式,简化了Dom操作 -->
    <!-- 第一个vue程序 -->
​
    <div id="app">
      {{message}}//
    </div>
    <script>
      var app = new Vue(
        {
          el: "#app", //告诉去管理id为app的元素(挂载点).app 标签选择器el:"div"
            //建议使用id选择器,作用就是设置Vue元素挂载
          data: {
            message: "hello Vue!",
          },
        } //data里的数据是要使用的真实数据对象
      );
    </script>
  </body>
</html>
​

data的数据是要使用的真实数据对象 (可以是复杂类型 对象 数组等),所有要使用到的数据全部都放在这里

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <!-- 开发版本,未压缩 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  </head>
  <body>
    <!-- vue简介 响应式,简化了Dom操作 -->
    <!-- 第一个vue程序 -->
​
    <div id="app">
      {{message}}
       <h2>{{school.name}} {{school.mobile}}</h2> <!-- 获取对象 -->
       <ul>
           <li>{{array[0]}}</li>
           <li>{{array[1]}}</li>
           <li>{{array[2]}}</li>
       </ul>
    </div>
    <script>
      var app = new Vue(
        {
          el: "#app", //告诉去管理id为app的元素
          data: {
            message: "Hello world",
            school:{
                name:"shilei",
                mobile: "123456"
            },//对象,
            array:["上海","成都","武汉"]//数组
          },
        } //data里的数据是要使用的真实数据
      );
    </script>
  </body>
</html>

基本语法格式

开发一个网站,不同于获取元素,操作他们,在vue之中,我们使用一系列以V开头的语法进行操作和使用(v打头的是写在标签里边的)

v-test(文本值)

 <div id="app">
     <!-- v-test 设置标签的文本值 -->
        <h2 v-text="message+'!'">背景</h2>//字符串拼接 这里的背景不会显示
        <h2>你好世界{{message}}+"!"背景</h2>这里的背景会被显示
     
    </div>
    <script>
      var app = new Vue(
        {
          el: "#app", //告诉去管理id为app的元素
          data: {
            message: "Hello world",
        } //data里的数据是要使用的真实数据
      );
    </script>

v-html

<div id="app">
     <!-- v-html 设置innerHTML -->
       <p v-html="content"></p>
       <p v-text="content"></p>
     <!-- 如果只是普通文本,显示没有任何的差异-->
      <p v-html="message"></p>
      <!-- 包含html的语句结构一样的话,就会显示超链接形式 -->
      <p v-text="message"></p>
    </div>
    <script>
      var app = new Vue(
        {
          el: "#app", 
          data: {
          message: "<a href='http://baidu.com'>1111</a>",
          content: "小强"
         
        } 
          } );
    </script>

v-on(为元素绑定事件)

常用事件 (onclick (点击事件) ,monsesenter(鼠标移入事件) dblclick(双击事件) onsubmit(表单提交时间))可以简写@click=“”

<div id="app">
    <input type="button" value="v-on按钮" v-on:click="doIt">
    <input type="button" Value="v-on简写" @click="doIt">
     <!-- 推荐使用简写模式,省略掉v-on -->
  </div>
  </div>
   
    <script>
      var app= new Vue({
        el:"#app",
        methods:{
          doIt :function(){
            alert("hello");
          }
        },
      })
      <!--使用Vue里边的data可以 methods定义函数可以,用别的命名规范跑不起来-->
    </script>
#操纵data里的数据直接用this点,不需要操作dom元素(使用的数据都在data里,this.不用dom)
<div id="app">
    <h2 @click="changeFood">{{food}}</h2>
</div>
   <!--  -->
    <script>
      var app= new Vue({
        el:"#app",
        data:{
          food:"xilanhua"
        },
        methods:{
          doIt :function(){
            alert("hello");
          },
          changeFood:function(){
            // console.log(this.food)
            this.food+="haochi"//拿到值用this点出来,不操作Dom元素
          }
        },
      })
    </script>

计数器实例

<body>
​
  <div id="app">
    <button @click="sub">-</button>
    <span >{{num}}</span>
    <button @click="add">+</button>
  </div>
   <!--  -->
    <script>
      var app= new Vue({
        el:"#app",
        data:{
         num:1
        },
        methods:{
          add :function(){
            if(this.num<10){
           this.num++;
           }else{
             alert("到头了,别加了");
           }
          },
          sub:function(){
            if(this.num>0){
            this.num--;
            }else{
              alert("最小了")
            }
          }
        },
      })
    </script>
  </body>

事件绑定的方法可以写成函数调用的形式,自定义参数,事件后面跟上.修饰符可以对事件进行限制,比如.enter可以限制触发的按键为回车

body>
    <div id="app">
      <input type="button" value="点击" @click="doit(666)">
      <input type="text"@keyup.enter="sayhi">
​
    </div>
​
    <script>
     var app=new Vue({
       el:"#app",
       data:{
         doit:function(p1){
           console.log("doit")
           console.log(p1)
         },
         sayhi:function(){
           alert("你好呀")
         }
       }
     });
    </script>
  </body>

v-show(根据表达式的真假,切换元素的显示和隐藏)

本质就是操作的display(display:none)

<body>
​
  <div id="app">
    <img v-show="isShow" src="https://img.alicdn.com/tfs/TB1lmcZy1L2gK0jSZFmXXc7iXXa-190-400.png" alt="">
    <img v-show="age>=18" src="" alt="">
    <!-- 可以是表达式 -->
    <button @click="changeShow">点击我改变状态</button>
    <button @click="addAge" >点我看图</button>
  </div>
   
    <script>
      var app= new Vue({
        el:"#app",
        data:{
         isShow:false,
         age:17
        },
        methods:{
          changeShow:function(){
            
            this.isShow=!this.isShow;
            //记得使用this
            },
            addAge:function(){
              this.age++;
            }
        }
      })
    </script>
  </body>

v-if(根据表达式的真假,切换元素的显示和隐藏(操作dom元素))

 <body>
​
  <div id="app">
   <input type="button" value="切换显示" @click="toggleIsShow">
   <p v-if="isShow">邵晨阳</p>
   <p v-show="isShow">邵晨阳他爸</p>
   <!-- v-show操作显示的是display=none v-if移除显示 dom元素(影响效率)-->
  </div>
   <!--  -->
    <script>
      var app= new Vue({
        el:"#app",
        data:{
         isShow:false
        },
        methods:{
          toggleIsShow: function(){
            this.isShow=! this.isShow;
          }
        }
      })
    </script>
  </body>

v-bind(动态绑定属性的值)

<style>
    .active{
      border: 10px solid green;
    }
  </style>
  <body>
​
  <div id="app">
    <img v-bind:src="imgsrc" alt="">
    <!-- 简写版本 效果是一样的-->
    <br>
    <img :src="imgsrc" alt="" :title="imgtitle"
     :class="isActive?'active':''" @click="toggleActive">
     <!-- 设置类名的方式是常用的写法,但是这种写法过于繁琐 
      :class:{active:isActive} 表示这个类名是否生效取决于isActive的值;
    -->
  </div>
   <!--  -->
    <script>
      var app= new Vue({
        el:"#app",
        data:{
          imgsrc:"https://img.alicdn.com/imgextra/i4/654230132/O1CN011CqUjkq0B61CxSU_!!654230132.jpg",
          imgtitle: "美女",
          isActive: false
        
        },
        methods:{
          toggleActive:function(){
            this.isActive=!this.isActive;
          }
        }
​
      });
    </script>
  </body>

v-for(根据数据生成列表)

数组经常和v-for结合使用,可以使用Vue其他的标签

(item,index )in 数组

<body>
​
  <div id="app">
    <input type="button" value="添加数据" @click="add">
    <input type="button" value="移除数据" @click="remove">
    <ul>
      <li v-for="(item,index) in arr">
        {{index+1}}王者荣耀:{{item}}
      </li>
    </ul>
    <h2 v-for="item in abb" v-bind:title="item.name">
      {{item.name}}
    </h2>
  </div>
   <!--  -->
    <script>
      var app= new Vue({
        el:"#app",
        data:{
          arr:["北京","刘强东","邵磊"], 
          abb:[
          {name:"打王者"},
          {name:"吃鸡"}
          ]
        },
        methods:{
            add: function(){
              this.abb.push({name:"干啥呢"})
            },
            remove: function(){
                this.abb.shift();
                // 移除数组最左边的元素
            }
        }
​
      });
    </script>
  </body>

v-model(可以和表单的数据进行关联,这个指令可以获取和设置表单元素的值)

双向数据绑定 表单的值和data里的值进行双向绑定,更改其中一个,另一个也会随之更改)

 <body>
    <div id="app">
      <input type="button"value="修改message的值" @click="setM">
      <input type="text" v-model="message" @keyup.enter="getM" >
      <!-- 当更改文本框的值的时候,绑定的message也会跟着响应式的改变 -->
      <h2>{{message}}</h2>
    </div>
​
    <script>
     var app=new Vue({
       el:"#app",
       data:{
         message:"小强",
         
         },
         methods:{
          getM: function(){
          alert(this.message);
         },
         setM:function(){
           this.message="吃了没";
         }
         }
        //  函数超过2个定义到methods里,如果定义在data里 ,会出现不可名状的错误
         
     });
    </script>
  </body>

Vue组件

组件是Vue可复用的实例,就是一种模板

<body>
   <div id="app">
    <demo></demo>
   </div>
   <script>
    //  定义组件名为demo
    Vue.component("demo",{
      template: '<li>ddsf</li>'
    });
    // Vue实例
     var vue=new Vue({
        el:"#app"
​
     });
   </script>
  </body>

组件与实例传值交互

<body>
   <div id="app">
     <!-- 组件与实例之间的交互中间商 -->
    <demo v-for="item in items" v-bind:item="item"></demo>
   </div>
   <script>
    //  定义组件名为demo
    Vue.component("demo",{
      // 接收参数
      props:['item'],
      // 模板
      template: '<li>{{item}}</li>'
    });
    // Vue实例
     var vue=new Vue({
        el:"#app",
        data:{
          items:["java","linux","redis"]
        }
     });
   </script>
  </body>

axios(类似于ajax)

<script>
    // Vue实例
     var vue=new Vue({
        el:"#app",
        // 此data是函数
        data(){
          return{
            // 请求的返回参数必须和json字符串一样
           info:{
              name:null,
            }
          }
        },
       mounted(){
        //  钩子函数
        axios.get('data.json').then(respomse=>(console.log(response.data)));
       }
     });
   </script>

计算属性(缓存)

 <body>
   <div id="app">
    <p>{{cruuentime()}}</p>
    <p>{{cruuentime1}}</p>
   </div>
   <script>
​
    // Vue实例
     var vue=new Vue({
        el:"#app",
        data:{
          mes:"hello shilei"
        },
        methods:{
          cruuentime:function(){
            return Date.now();//返回当前时间戳
          },
          computed:{
            // 计算属性,methods:computed/方法名不能重名,
            cruuentime1:function(){
              return Date.now();
            }
          }
          
        }
     });
   </script>
  </body>

slot(插槽,官网案例)

<navigation-link url="/profile">
  Your Profile
</navigation-link>

然后你在 <navigation-link> 的模板中可能会写为:

<a
  v-bind:href="url"
  class="nav-link"
>
  <slot></slot>
</a>

当组件渲染的时候,<slot></slot> 将会被替换为“Your Profile”。插槽内可以包含任何模板代码,包括 HTML:

<navigation-link url="/profile">
  <!-- 添加一个 Font Awesome 图标 -->
  <span class="fa fa-user"></span>
  Your Profile
</navigation-link>

甚至其它的组件:

<navigation-link url="/profile">
  <!-- 添加一个图标的组件 -->
  <font-awesome-icon name="user"></font-awesome-icon>
  Your Profile
</navigation-link>

如果 <navigation-link>template没有包含一个 <slot> 元素,则该组件起始标签和结束标签之间的任何内容都会被抛弃。

Vue生命周期

Vue-cli程序

1.下载node.js //无脑安装即可    cmd 下node -v 查看版本 npm -v 查看版本
2.安装node.js淘宝镜像加速器(cnpm) -g就是全局安装
npm install cmpm -g
3.安装vue-cli
cnpm install vue-cli -g
查看可以创建哪些vue-cli
vue list
​
================================
4.创建程序
进入目录下 
vue init webpack myvue
会给我一些项目描述,提示,直接构建
如果有警告,按照指示修复就可以啦
--------
进入myvue安装依赖 
npm install
5.打包运行
可以通过idea Vscode 打开查看目录结构,
进入项目myvue 打包运行
npm run dev
停止 ctrl+c

Webpack

本质上,webpack是一个现代的javascript应用程序的静态模块打包器(moudle bundler),当webpack处理应用程序时,它会递归地构建一个依赖关系图,其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或者多个bundle。

服务器端的node.js遵循CommonJS规范,该规范的核心思想就是允许模块通过require方法来同步加载所需的依赖的其他模块,它通过exports或者 module exports来导出需要暴露的接口

安装webpack模块化打包工具

npm install webpack -g
npm install webpack-cli -g

测试安装成功

webpack -v
webpack-cli -v

webpack.config.js配置文件

entry:入口文件,指定webpack从哪个文件作为项目的入口
output:输出 指定webpack把处理完成的文件放置到指定路径
module:模块 用于处理各种类型的文件
plugins:插件,如热更新、代码重用等
resolve:设置路径指向
watch:监听,用于设置文件改动后直接打包

使用步骤

创建hello.js

//暴露方法
exports.sayHi=function(){
    document.write('<div>哥哥在学习</div>')
}
exports.sayHi1=function(){
    document.write('<div>哥哥在学习</div>')
}
exports.sayHi2=function(){
    document.write('<div>哥哥在学习</div>')
}

创建主入口main.js

let hello=require("./hello")//导入 就像类一样
hello.sayHi();
hello.sayHi1();
hello.sayHi2();
创建核心配置文件webpack-config.js

module.exports={
    entry: './modules/main.js',
    output:{
        filename:"./js/bundle.js" //打包生成的js文件
    }
};

创建主界面

//所以说在主界面直接引入打包之后的js就可以啦

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="./js/bundle.js"></script>
</body>
</html>

Vue Router

Vue Router是Vue.js官方的路由管理器,它和Vue.js的核心深度集成,让构建单页面应用变得易如反掌,包含的功能有

  • 嵌套的路由/视图表

  • 模块化的、基于组件的路由配置

  • 路由参数、查询、通配符

  • 基于Vue.js过渡系统的视图过渡效果

  • 细粒度的导航控制

  • 带有自动激活的css class的链接

  • HTML5历史模式或者hash模式,在IE9中自动降级

  • 自定义的滚动条行为

在项目之中控制台安装

npm install vue-router --save-dev

使用

//导入vuerouter
import VueRouter from 'vue-router'
//显式声明使用vuerouter
Vue.use(VueRouter);
​
//配置导出路由
exports default new Router({
    routes:[
   { //路由路径
    path:'/content',
    name:'content'
    //跳转的组件
    componet:content
   }
    ....//如果有其他路由,可以配置多个路径
  ]
})
//配置好上述配置文件,这里使用
<router-link to="/main">首页</router-link>
<router-link to="/content">内容</router-link> to就相当于href
<router-view></router-view>

Vue+EmentUI

vue init webpack hello-vue
//进入工程目录
cd hello-vue
//安装router
npm install vue-router --save-dev
//安装element-ui
npm i element-ui -S
//安装依赖
npm install
//安装SASS加速器
cnpm install sass-loader node-sass --save-dev
//启动测试
npm run dev

在主界面main.js引用element-ui

import Vue from 'vue'
import App from './App'
​
import router from './router'
import Element from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
​
Vue.use(router);
Vue.use(Element);
new Vue({
  el: '#app',
  router,
  render: h=>h(App)  //ElementUI
})
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值