天天看点

Web前端-Vue.js必备框架(三)

Web前端-Vue.js必备框架(三)
Web前端-Vue.js必备框架(三)

vue

是一款渐进式

javascript

框架,由

evan you

开发。

vue

成为前端开发的必备之一。

vue

的好处轻量级,渐进式框架,响应式更新机制。

开发环境,浏览器使用

chrome

,ide:

vs code

或者

webstorm

node.js8.9+

npm

uni-app

直接使用

<script>

引入

vue.js

vue

会被注册为一个全局变量,开发环境不要使用压缩版本,一:开发版本有完整的警告和调式模式,二:生产版本删除了警告。

<script src="https://cdn.jsdelivr.net/npm/vue"></script>
                

生产环境:

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
                

开发:

<!DOCTYPE html>
<head>
<meta charset="utf-8">
<title></title>
<link rel="stylesheet" type="text/css" media="screen" href="main.css">
<script src="main.js"></script>
</head>
<body>
<div id="app">
 {{ message }}
<ol>
<todo-item v-for="item in arrList" v-bind:todo="item" v-bind:key="item.id"></todo-item>
</ol>
</div>

<script src="https://cdn.jsdelivr.net/[email protected]/dist/vue.js"></script>

<script>
 Vue.component('todo-item', {
props: ['todo'],
template: '<li class="text"> {{ todo.text }} </li>'
 })
var app = new Vue({
el: '#app',
data: {
message: 'hello',
arrList: [{
id: 0,
text: 'da'
   },{
id: 1,
text: 'shu'
   }]
  }
 })
</script>
</body>
</html>           
<body>
<div id="app">
  {{message}}
</div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"></script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'hello',
   }
  })
</script>
</body>           
vue CLI
npm install -g @vue/cli
vue create hello
cd hello
npm run serve           

属性:自定义属性,原生属性,特殊属性。

组件中

props

中声明属性。

vue组件=vue实例=new Vue(options)                
Web前端-Vue.js必备框架(三)

每一个

vue

组件都是一个

vue

实例,

vue

实例通过

new vue

函数创建的。

事件:普通事件,修饰符事件。

@click @input @change 普通事件
                
@input.trim @click.stop @submit.prevent 修饰符事件                
<template>
<div>
  name: {{ name || "--" }}
<br/>
<input :value="name" @change="handleChange"/>
<br/>
<div @click="handleDivClick">
<buttom @click="handleClick">成功</button>&nbsp;
<button @click.stop="handleClick">失败</button>
</div>
</div>
</template>

<script>
export default {
name: "EventDemo",
props: {
neme: String
 },
methods: {
  handleChange(e) {
this.$emit("change",  e.targer.value);
  },
  handleDivClick() {
this.$emit("change", "");
  },
  handleClick(e) {
//e.stopPropagation();
  }
 }
};
</script>           

插槽:普通插槽和作用域插槽。

<template slot="#"></template>
<template v-slot:#></template>

<template slot="#" slot-scope="props"></template>
<template v-slot:#="props'></template>
<a-tab-pane key="event" tab="事件">
<Event :name="name" @change="handleEventChange"/>
</a-tab-pane>

<a-tab-pane key="slot" tab="插槽">
<h2>新语法</h2>
<$lotDemo>
<p></p>
<template v-slot:title>
<p>title</p>
<p>tiltle</p>
</template>
<template v-slot:item="props">
<p>item {{ props }} </p>
</template>
<$lotDemo>
<br/>
</a-tab-pane>
<template>
<div>
<slot/>
<slot name="title"/>
<slot name="item" v-bind="{ value: 'vue' }"/>
</div>
</template>

<script>
export default {
name: "SlotDemo"
};
</script>           

小结:

属性,自定义属性:

props

,原生属性:

attrs

,特殊属性:

class

style

插槽:普通插槽,作用域插槽。

双向绑定:

model

数据的更新会导致

view

视图的更新,

view

视图的更新会导致

model

数据的更新。但

vue

是单向数据流,

Object.defineProperty

响应式更新。

// 语法糖
<Personalnfo
 v-model="phoneInfo"
 :zip-code.sync="zipCode"
/>

<PersonalInfo
 :phone-info="phoneInfo"
@change="val => (phoneInfo = val)"
 :zip-code="zipCode"
@update:zipCode="val => (zipCode=val)"
/>           

状态

data

和属性

props

状态是组件自身的数据,属性来自父组件的数据。

状态和属性的改变都未必会触发更新。

好了!下面开讲:

开发环境版本:

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
                

生产环境版本:

<script src="https://cdn.jsdelivr.net/npm/vue"></script>
                

新手不建议用

vue-cli

哦!

数据渲染:

<div id="app">
  {{ message }}
</div>
var app = new Vue({
el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})
<div id="app-2">
  <span v-bind:title="message">
    鼠标悬停几秒钟查看此处动态绑定的提示信息!
  </span>
</div>
var app2 = new Vue({
el: '#app-2',
  data: {
    message: '页面加载于 ' + new Date().toLocaleString()
  }
})
<div id="app-3">
  <p v-if="seen">现在你看到我了</p>
</div>
var app3 = new Vue({
el: '#app-3',
  data: {
    seen: true
  }
})
<div id="app-4">
<ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
var app4 = new Vue({
el: '#app-4',
  data: {
    todos: [
      { text: '学习 1' },
      { text: '学习 2' },
    ]
  }
})
<div id="app-5">
<p>{{ message }}</p>
  <button v-on:click="reverseMessage">逆转消息</button>
</div>
var app5 = new Vue({
el: '#app-5',
  data: {
    message: 'Hello dashucoding!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})
<div id="app-6">
<p>{{ message }}</p>
  <input v-model="message">
</div>
var app6 = new Vue({
el: '#app-6',
  data: {
    message: 'dashucoding!'
  }
})           

组件化:

<div id="app-7">
<ol>
<!--
      现在我们为每个 todo-item 提供 todo 对象
      todo 对象是变量,即其内容可以是动态的。
      我们也需要为每个组件提供一个“key”,稍后再
      作详细解释。
    -->
<todo-item
v-for="item in gList"
v-bind:todo="item"
v-bind:key="item.id"
    ></todo-item>
</ol>
</div>
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})

var app7 = new Vue({
el: '#app-7',
data: {
gList: [
      { id: 0, text: '123' },
      { id: 1, text: '456' }
    ]
  }
})
创建一个 Vue 实例

var vm = new Vue({
// 选项
})           
Web前端-Vue.js必备框架(三)
Web前端-Vue.js必备框架(三)

$

用于区分与用户定义的属性。

Web前端-Vue.js必备框架(三)

v-once

执行一次性插值,数据改变后,不会再改变。

v-bind:

修饰符:

<form v-on:submit.prevent="onSubmit">...</form>
                

v-bind

v-on

<!-- 完整语法 -->
<a v-bind:href="url"></a>

<!-- 缩写 -->
<a :href="url"></a>

<!-- 完整语法 -->
<a v-on:click="do"></a>

<!-- 缩写 -->
<a @click="do"></a>           

结言

好了,欢迎在留言区留言,与大家分享你的经验和心得。

感谢你学习今天的内容,如果你觉得这篇文章对你有帮助的话,也欢迎把它分享给更多的朋友,感谢。

web