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

vue是一款渐进式javascript框架,由evan you开发。vue成为前端开发的必备之一。

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

开发环境,浏览器使用chrome,ide:vs code或者webstormnode.js8.9+npm

uni-app直接使用<script>引入vue.jsvue会被注册为一个全局变量,开发环境不要使用压缩版本,一:开发版本有完整的警告和调式模式,二:生产版本删除了警告。

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

生产环境:

<script src="https://cdn.jsdelivr.net/npm/vue@2.6.8/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/vue@2.6.8/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/vue@2.6.8/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)

每一个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,特殊属性:classstyle

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

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

双向绑定:

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({
// 选项
})

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

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

v-bind:

修饰符:

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

v-bindv-on

<!-- 完整语法 -->
<a v-bind:href="url"></a> <!-- 缩写 -->
<a :href="url"></a> <!-- 完整语法 -->
<a v-on:click="do"></a> <!-- 缩写 -->
<a @click="do"></a>

结言

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

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

作者简介

达叔,理工男,简书作者&全栈工程师,感性理性兼备的写作者,个人独立开发者,我相信你也可以!阅读他的文章,会上瘾!,帮你成为更好的自己。长按下方二维码可关注,欢迎分享,置顶尤佳。

Web前端-Vue.js必备框架(三)的更多相关文章

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

    Web前端-Vue.js必备框架(五) 页面组件,商品列表组件,详情组件,购物车清单组件,结算页组件,订单详情组件,订单列表组件. vue-router 路由 vuex 组件集中管理 webpack ...

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

    Web前端-Vue.js必备框架(四) 计算属性: <div id="aaa"> {{ message.split('').reverse().join('') }} ...

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

    Web前端-Vue.js必备框架(二) vue调式工具vue-devtools 过滤器:vue.js允许你自定义过滤器,可被用作一些常见的文本格式化. mustache插值和v-bind表达式. vu ...

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

    Web前端-Vue.js必备框架(一) <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  5. web前端——Vue.js基础学习

    近期项目的前端页面准备引入Vue.js,看了网上一些简介,及它和JQuery的对比,发现对于新入门的前端开发来说,Vue 其实也是比较适用的一个框架,其实用性不比JQuery差,感觉还挺有意思,于是研 ...

  6. Web - 前端 Vue.js (1)

    Vue.js是当下很火的一个JavaScript MVVM库,它是以数据驱动和组件化的思想构建的.相比于Angular.js,Vue.js提供了更加简洁.更易于理解的API,使得我们能够快速地上手并使 ...

  7. web前端——Vue.js基础学习之class与样式绑定

    打着巩固 css 知识的旗号开始了对 vue 样式绑定的研究,相比前一篇的 demo,本次内容多了各种样式在里面,变得稍微花哨了些,话不多说,直接上代码吧: <html> <head ...

  8. web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍

    web前端Vue+Django rest framework 框架 生鲜电商项目实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...

  9. web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝

    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...

随机推荐

  1. Flask简介&入门

    1 了解框架 Flask作为Web框架,它的作用主要是为了开发Web应用程序.那么我们首先来了解下Web应用程序.Web应用程序 (World Wide Web)诞生最初的目的,是为了利用互联网交流工 ...

  2. 错误: Cause: java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for studentDao.insert

    详细错误信息: org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: java. ...

  3. scrapy爬取数据保存csv、mysql、mongodb、json

    目录 前言 Items Pipelines 前言 用Scrapy进行数据的保存进行一个常用的方法进行解析 Items item 是我们保存数据的容器,其类似于 python 中的字典.使用 item ...

  4. C#通过文件路径获取文件名小技巧

    string fullPath = @"\WebSite1\Default.aspx"; string filename = System.IO.Path.GetFileName( ...

  5. 看了这一张GIF图你就明白什么回事了,必看的经典!--快速构建一个请假流程

    下面介绍一下FSBPM构建一个请假单流程 1.数据模型的构建 输入业务中需要的数据项即可,比如[申请人,开始时间,结束时间,请假天数,请假理由,附件上传..........] 2.自定义流程 审批节点 ...

  6. 2018-2019-2 20165239其米仁增《网络对抗》Exp1 PC平台逆向破解

    一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌握反汇编与十六进制编程器 (0.5分) 3.能正确修改机器指令改变程序执行流程(0.5分) 4.能 ...

  7. 2018-2019 20165235 网络对抗 Exp5 MSF基础

    2018-2019 20165235 网络对抗 Exp5 MSF基础 1. 实践内容(3.5分) 1.1一个主动攻击实践 攻击方:kali 192.168.21.130 靶机: win7 192.16 ...

  8. angular简介

    1.angular简介 一款非常优秀的前端高级 JS 框架 由 Misko Hevery 等人创建 2009 年被 Google 公式收购,用于其多款产品 有一个全职的开发团队继续开发和维护这个库 有 ...

  9. Numpy 基础运算2

    # -*- encoding:utf-8 -*- # Copyright (c) 2015 Shiye Inc. # All rights reserved. # # Author: ldq < ...

  10. Do Now 一个让你静心学习的APP——团队博客

    Do Now 一个让你静心学习的APP 来自油条只要半根团队的智慧凝聚的产物! 团队博客总目录: 团队作业第一周 团队作业第二周 Do Now -- 团队冲刺博客一 Do-Now-团队Scrum 冲刺 ...