Vue学习之基础一

Vue特点

  1. Vue是一个MVVM框架

    • M 模型 model 数据
    • V 视图 view
    • VM C -> P -> VM 视图模型 -> 处理逻辑
  2. 单向数据流

    • 数据由父级传递给子级
  3. Vue是一个js渐进式框架

    • 渐进式: 越学越难
    • 想学的容易:加强基础
  4. Vue是使用了虚拟DOM技术

  5. Vue拥有便利性的指令

    • 指令: 操作dom的一种方式
  6. Vue拥有组件系统

    • 组件: 组件是一个html、css、js的一个聚合体

Vue的使用

  1. Vue可以通过两种方式引入

    vue可以模块化使用,可以使用npm安装,因为它使用了amd的define来定义模块

    vue可以以标签化引入,外部文件引入

  2. HelloWorld案例示范

    //先引入Vue,会得到一个全局变量Vue,是一个构造函数
    <script src="./Vue.js">  
    //将一个已有Dom作为Vue的实例范围 ——> #app 
    <body>
    	<div id="app"> 
    		//要想在dom结构中书写js,那么我们的需要一个插值表达式,也就是{{}}
    		<h3> {{ info }} </h3>
    		//采用省略this的写法,这里的this指代的就是Vue的实例化对象
    		//<h3> {{ this.info }} </h3> 
    	</div>
    </body>
    //实例化Vue
    <script>
    	new Vue({
    		el:"#app",  //Vue实例范围
    		data:{
    			info:'消息'
    			//data存放数据,在Vue实例范围内相当于全局变量
    		}
    	})
    </script>
    
    

Vue数据响应

  • 称呼: 深入响应式原理 、 双向数据绑定原理
  • 数据响应指的是: 当数据改变时,视图也会随之改变 ,当用户输入信息时,数据也改变了
  • Vue数据响应式原理 ?

    Vue是通过使用ES5的 Object.defineProperty 中的 getter 和 setter 来对 data选项 进行数据劫持的,所以只有在 data选项 中定义的数据才会响应

    <body>
    <button> 数据改变 </button>
    <div class="box"></div>
    </body>
    <script>
    /* 
    	* vue响应式原理的实现
    	*   Object.defineProperty 中的  getter 和 setter  做的数据劫持
    */
    
    const box = document.querySelector('.box') 
    const btn = document.querySelector('button')
    
    const data = {
    	msg: ''
    }
    
    btn.onclick = function () {
    	data.msg = '起床'
    }
    
    // Object.defineProperty( 哪一个对象,这个对象的某一个属性, 属性的描述符 	)
    
    Object.defineProperty( data, 'msg', {
    	get () { // get是做初始化赋值的
      		return 'aa'
    	},
    	set ( val ) {// set是完成数据的重新设置,也就是修改
      		console.log('val',val ) //val是视图重新输入的值
      		box.innerHTML = val 
      		return ;
    	}
    })
    box.innerHTML = data.msg 
    </script>
    

Vue指令

  1. 数据绑定 v-htmlv-text

    v-html 能够解析html标签
    v-text

     <p v-html = "msg"></p>    // 能够解析html标签
     <p v-text = "msg"></p>      //不能
    
  2. 单项数据绑定 v-bind(简写为
    • 绑定数据
      <img v-bind:src = "imgUrl" alt="">
      <img :src = "imgUrl" alt="">   
      
    • 绑定类名
       <!-- <p :class = "{类名:布尔值 }"> 对象形式 </p> -->
       <p :class = "{ size: flag,bg: true }"> 对象形式 </p>
       <p :class = "[ 'size',flag && 'bg' || 'blue' ]"> 数组形式 </p>  //size和bg均为类名
       <p class = "btn" :class = "['size','bg']"></p>  //不影响btn类名
       <p :class = "{[ a ]: true,[ b ]: true }"></p>    //data中 { a:'size',b:'bg' }
      
    • 绑定行内样式
      <p style = "width: 100px;height: 100px;background: green;"></p>
      <p :style = "{
      width: '100px',
      height: '100px',
      background: 'purple'
       }"> 对象形式 </p>
      <p :style = "[{ width: '200px',height: '200px' },{ background: 'yellow' }]"> 数组形式 </p>
      <p :style = "[ chicun,yanse ]"></p>
      
  3. 条件渲染 v-ifv-elsev-else-if
    <!-- 1. 单路分支  if(){} -->
      <p v-if = "5>3"> 单路分支 </p>
      <p v-if = "flag"> 单路分支 </p>
    <!-- 2. 双路分支 if () {} else {}-->
      <p v-if = "flag"> 双路分支一 </p>
      <p v-else> 双路分支二 </p>
    <!-- 3. 多路分支  if () {} else if () {} else {} -->
    
      <p v-if = "grade < 60 "> 不及格 </p>
      <p v-else-if = " grade >= 60 && grade < 80"> 良好 </p>
      <p v-else> 优秀 </p>
    
  4. 条件展示 v-show
    <p v-show = "flag"> 条件展示 </p>  //
    
  5. 列表渲染 v-for

    v-for = " (item,key,index ) of obj " :key = “index”
    :key最好使用id,次之使用index

  6. 事件 v-on(简写为 @

    @事件类型 = ‘方法名’

  7. 双项数据绑定v-model 和 一次性事件v-once

    input文本输入框首选v-mode

Vue数据请求

axios (axios的返回值是一个封装对象,可以提高安全性的)

  • 模拟数据请求
    1. 自己模拟数据,注意:和后端字段必须一致
    2. mock.js 来生成json数据
    3. easymock
    4. jsonserver - 如何使用
  • 后端接口请求(put,delete实质上就是get请求)
    • get
    • post
      • json
      • 表单提交
    • put
    • delete
  • 使用
    axios.defaults.baseURL = 'http://localhost:3000'; // 开发环境
    // axios.defaults.baseURL = 'http://10.31.159.178:3000'; // 生成环境一个
    // axios.defaults.baseURL = 'http://localhost:3000'; // 测试环境
    // axios.defaults.baseURL = 'http://localhost:3000'; // 上线环境
    new Vue({
    el: '#app',
    data: {},
    methods: {
      getMockData () {//模拟数据
        // axios.get()
        // axios.post()
        // axios(options)
        axios({
          // url: './data/myself.json',
          // url: 'http://localhost:3000/user'
          url: '/user',
          // methods: 'get'  默认就是get请求
        }).then( res => console.log( 'res',res ))
          .catch( err => console.log( err ))
      },
      postFn1 () {
      //  axios.post(url,{})
      const { username,password } = this 
      axios({
        url: '/users',
        method: 'POST',
        data: {
          username,
          password,
          token: '',//用于登录,一般要携带token
        }
      }).then( res => console.log( err ))
        .catch( err => console.log( err ))
     },
     postFn2 () {
       const p = new URLSearchParams() // 得到数据参数携带对象
       const { username,password } = this 
       p.append('username',username )
       p.append('password',password)
       axios({
         url: '/users',
         method: 'POST',
         data: p
       }).then( res => console.log( 'res',res ))
         .catch( err => console.log( err ))
     },
     put () {
      axios({
        url: '/users',
        method: 'PUT',
        params: {
          id: 1
        }
      }).then( res => console.log( res ))
        .catch( err => console.log( err ) )
     },
    },
    })
    

fecth

  • 特点
  1. 原生js提供,可以说ajax封装版本,用起来简易
  2. 符合模块化思想
  3. 在浏览器中呈现的fetch字样
  4. fetch也是promise
  5. fetch返回值是没有经过封装的,安全度比axios要低
  • 使用
    new Vue({
     el: '#app',
     data: {},
     methods: {
       mock () {
         // fetch( url,options )
         fetch(`${ baseURL }/user`)
           .then( data => data.json() ) // 数据格式化    json()  text()   blob() 二进制格式化
           .then( res => console.log( res )) // res就是得到的真正的数据
           .catch( err => console.log( err ))
       },
       get () {
         // const data = {
         //   word: 'jwj'
         // }
         fetch(`${ baseURL }/search?name=xige`,{
           method: 'GET'
         })
           .then( data => data.json() ) // 数据格式化    json()  text()   blob() 二进制格式化
           .then( res => console.log( res )) // res就是得到的真正的数据
           .catch( err => console.log( err ))
       },
       post () {
         fetch(`${ baseURL }/users`,{
           method: 'POST',
           headers: new Headers({
           // 指定提交方式为表单提交
             'Content-Type': 'application/x-www-form-urlencoded' 
           }),
           body: new URLSearchParams([["username", 'jwj'],["password", 123]]).toString() // 这里是请求对象
         })
           .then( data => data.json() ) // 数据格式化    json()  text()   blob() 二进制格式化
           .then( res => console.log( res )) // res就是得到的真正的数据
           .catch( err => console.log( err ))
       },
       postJSON () {
         fetch(`${ baseURL }/users`, {
           method: 'POST', // or 'PUT'
           body: JSON.stringify({
             username: 'jwj',
             password: 123
           }), // data can be `string` or {object}!
           headers: new Headers({
             'Content-Type': 'application/json'
           })
         }).then(res => res.json())
           .catch(error => console.error('Error:', error))
           .then(response => console.log('Success:', response));
         }
     },
    

})
```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值