开发环境
https://cdn.jsdelivr.net/npm/vue/dist/vue.js
生产环境
https://cdn.jsdelivr.net/npm/vue
vue-cli是什么?基于Node.js的构建工具是什么?
Vue.js的核心
采用模板语法,通过声明,将数据渲染进DOM
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="app">
{
{ message }}
div>
<div id='app-2'>
<span v-bind:title="message">
鼠标放这儿
span>
div>
<div id="app-3">
<p v-if="seen">是否能看见我?p>
div>
<div id='app-4'>
<ol>
<li v-for="i in todos">
{
{ i.text}}
li>
ol>
div>
body>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
var app2 = new Vue({
el: '#app-2',
data: {
message: '页面加载于' + new Date().toLocaleString()
}
})
var app3 = new Vue({
el: '#app-3',
data: {
seen: true
}
})
var app4 = new Vue({
el: '#app-4',
data: {
todos: [
{
text: 'JavaScript' },
{
text: 'Vue' },
{
text: 'Program' }
]
}
})
script>
html>
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="app-5">
<p> {
{ message}}p>
<button v-on:click="reverseMessage">翻转消息button>
div>
<div id="app-6">
<p>{
{ message }}p>
<input v-model="message">
div>
body>
<script>
var app5 = new Vue({
el: '#app-5',
data: {
message: 'hello'
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})
var app6 = new Vue({
el: '#app-6',
data: {
message: '你好'
}
})
script>
html>
vue官网1
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="app-7">
<ol>
<todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id">
todo-item>
ol>
div>
body>
<script>
Vue.component('todo-item', {
props: ['todo'], //props类似于一个自定义attribute
template: '{
{ todo.text }} '
})
var app7 = new Vue({
el: '#app-7',
data: {
groceryList: [
{
id: 0, text: '蔬菜' },
{
id: 1, text: '水果' }
]
}
})
script>
html>
箭头函数是什么东西
2
点这里
v-once指令可以使数据改变时, 页面的值不更新
<span v-once>这个将不会改变: {
{ msg }}span>
双大括号把html当普通文本
v-html指令可以输出真正的html
XSS攻击是什么?
双括号中不能使用JavaScript语句
双括号中可以使用JavaScript表达式
不应在模板表达式中访问用户自定义的全局变量,因为其在沙盒中
10100 10100 10100 10100 10100 10100 10100 10100
计算属性
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="example">
<p>Original: {
{ message }}p>
<p>Computed: {
{ reverseMessage }}p>
div>
body>
<script>
var app = new Vue({
el: '#example',
data: {
message: 'hello',
},
computed: {
reverseMessage: function () {
return this.message.split('').reverse().join('')
}
}
})
script>
html>
方法
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="example">
<p>Original: {
{ message }}p>
<p>Computed: {
{ reverseMessage() }}p>
div>
body>
<script>
var app = new Vue({
el: '#example',
data: {
message: '123',
},
methods: {
reverseMessage: function () {
return this.message.split('').reverse().join('')
}
}
})
script>
html>
AngularJS是什么?
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
head>
<body>
<div id="demo">
<p> {
{ fullName }} p>
<input v-model="fullName">
div>
<div id="app-6">
<p>{
{ message }}p>
<input v-model="message">
div>
body>
<script>
var app = new Vue({
el: '#demo',
data: {
firstName: 'Vue',
lastName: 'Js'
},
computed: {
fullName: {
get: function () {
return this.firstName + ' ' + this.lastName
},
set: function (newValue) {
var names = newValue.split(' ')
this.firstName = names[0]
this.lastName = names[names.length - 1]
}
}
}
})
var app6 = new Vue({
el: '#app-6',
data: {
message: '你好'
}
})
script>
html>
为什么两种效果不一样?
一个简单的表格是这么创建的:
属性 | 解释 |
---|---|
侦听器 | 使用watch在数据变化时执行异步或开销较大的操作 |
<html>
<head>
<title>test vuetitle>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/axios.min.js">script>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js">script>
head>
<body>
<div id="watch-example">
<p>
Ask a question:
<input v-model="question">
p>
<p>{
{ answer }}p>
div>
body>
<script>
// 根据question状态的变化在answer部分打印不同的语句
// 1. 初始化说明
// 2. 监测:当question变化时,显示正在输入中
// 3. 限制,当输入完成以后,调用获取answer的接口
// 4. question中找不到问号则提示
// 5. question中有问号则调用一次接口,并赋值answer
var watchExampleVM = new Vue({
el: '#watch-example',
data: {
question: '',
answer: 'I cannot give you an answer until you ask a question!'
},
watch: {
// 如果 `question` 发生改变,这个函数就会运行
question: function (newQuestion, oldQuestion) {
this.answer = 'Waiting for you to stop typing...'
this.debouncedGetAnswer()
}
},
created: function () {
// `_.debounce` 是一个通过 Lodash 限制操作频率的函数。
// 在这个例子中,我们希望限制访问 yesno.wtf/api 的频率
// AJAX 请求直到用户输入完毕才会发出。想要了解更多关于
// `_.debounce` 函数 (及其近亲 `_.throttle`) 的知识,
// 请参考:https://lodash.com/docs#debounce
this.debouncedGetAnswer = _.debounce(this.getAnswer, 500)
},
methods: {
getAnswer: function () {
if (this.question.indexOf('?') === -1) {
this.answer = 'Questions usually contain a question mark. ;-)'
return
}
this.answer = 'Thinking...'
var vm = this
axios.get('https://yesno.wtf/api')
.then(function (response) {
//{"answer":"yes","forced":false,"image":"https://yesno.wtf/assets/yes/2-5df1b403f2654fa77559af1bf2332d7a.gif"}
// vm.answer = _.capitalize(response.data.answer)
vm.answer = _.capitalize(response.data.answer + ',' + response.data.image)
})
.catch(function (error) {
vm.answer = 'Error! Could not reach the API. ' + error
})
}
}
})
script>
html>
<div
class="static"
v-bind:class="{ active: isActive, 'text-danger': hasError }"
>div>
<script>
data: {
isActive: true,
hasError: false
}script>
<div class="static active">div>
内联定义是什么?
绑定的数据对象不必内联定义在模板里,即可以不定义
<div v-bind:class="classObject">div>
<script>
data: {
classObject: {
active: true,
'text-danger': false
}
}
script>
详情链接
就是某个属性怎么样是计算得来的
<div v-bind:class="classObject">div>
<script>
data: {
isActive: true,
error: null
},
computed: {
classObject: function () {
return {
active: this.isActive && !this.error,
'text-danger': this.error && this.error.type === 'fatal'
}
}
}
script>
当在自定义组件上添加class属性时,这个属性会被添加到该组件的根元素上,且已经存在的class不会被覆盖
就是给标签赋予某种样式
<div v-bind:style="{
color: activeColor, fontSize: fontSize + 'px' }">div>
<script>
data: {
activeColor: 'red',
fontSize: 30
}
script>
<div v-bind:style="styleObject">div>
<script>
data: {
styleObject: {
color: 'red',
fontSize: '13px'
}
}
script>
<div v-bind:style="[baseStyles, overridingStyles]">div>
有点理解不了了,像看:
Γ O ∈ ∀ Γ O ∈ ∀ Γ O ∈ ∀ Γ O ∈ ∀ Γ O ∈ ∀ \Gamma \mathbb O \in \forall \Gamma \mathbb O \in \forall \Gamma \mathbb O \in \forall \Gamma \mathbb O \in \forall \Gamma \mathbb O \in \forall ΓO∈∀ΓO∈∀ΓO∈∀ΓO∈∀ΓO∈∀
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
一样
算了,这个甘特图看起来没什么意思,不看了
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
flowchart的流程图:
组件注册
Prop
自定义事件
插槽
动态组件&异步组件
处理边界情况
过渡&动画
可复用性&组合
规模化
太多了,还是去官网看吧
Vue介绍 ↩︎
箭头函数 ↩︎