Vue.js基础(All In One HTML Page)
小胡子模板 v-html v-text v-bind 绑定class 绑定style 计算属性 methods与computed v-on 条件渲染 v-show v-for遍历数组 v-for遍历对象 v-model表单绑定 v-model:radio v-model:checkbox 单选 v-model:checkbox 多选 v-model:修饰符 过滤器 观察属性 组件基础 局部的组件 表行组件 组件数据 为组件传递数据HTML->组件 为组件传递变量数据 组件props参数验证 事件传递:子组件注册v-on事件 slot插槽 组合slot
<!DOCTYPE html>
< html lang = " en" >
< head>
< meta charset = " UTF-8" >
< meta http-equiv = " X-UA-Compatible" content = " IE=edge" >
< meta name = " viewport" content = " width=device-width, initial-scale=1.0" >
< title> View</ title>
< script src = " http://119.3.180.71/api/vue.js" > </ script>
< style>
p {
color : orangered;
}
.line {
height : 2px;
width : 100%;
background-color : rgb ( 35, 37, 37) ;
}
.bigsize {
font-size : 30px;
}
.blackcolor {
color : black;
}
</ style>
</ head>
< body>
< div class = " line" > </ div>
< div id = " div_1" >
< p> 小胡子模板</ p>
< h1> {{num}}</ h1>
< h2> {{num*2}}</ h2>
</ div>
< script type = " text/javascript" >
let div_1 = new Vue ( {
el: "#div_1" ,
data: {
num: 1 ,
}
} ) ;
div_1. _data. num = 2 ;
console. log ( div_1) ;
</ script>
< div class = " line" > </ div>
< div id = " div_2" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-html v-text</ p>
< p> {{link}}</ p>
< p v-html = " link" > </ p>
< p v-text = " link" > </ p>
</ div>
< script type = " text/javascript" >
let div_2 = new Vue ( {
el: "#div_2" ,
data: {
link: '<a href="www.baidu.com">百度</a>'
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_3" >
< p style =" color : rgb ( 57, 170, 47) ; " > 使用双向绑定v-bind</ p>
< a v-bind: href= " url" > {{name}}</ a>
</ div>
< script type = " text/javascript" >
let div_3 = new Vue ( {
el: "#div_3" ,
data: {
url: "http://119.3.180.71" ,
name: "图享"
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_4" >
< p style =" color : rgb ( 57, 170, 47) ; " > 绑定class</ p>
< p :class = " {' bigsize' :isBigsize,' blackcolor' :isBlackcolor}" > HELLO WORLD</ p>
< p :class = " [' bigsize' ,' blackcolor' ]" > HELLO WORLD</ p>
</ div>
< script type = " text/javascript" >
let div_4 = new Vue ( {
el: "#div_4" ,
data: {
isBigsize: true ,
isBlackcolor: true ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_5" >
< p style =" color : rgb ( 57, 170, 47) ; " > 绑定style</ p>
< p : style =" { color : color,fontSize : fontsize+'px' } " > HELLO WORLD</ p>
< p : style =' [bold,grey] ' > HELLO CODER</ p>
</ div>
< script type = " text/javascript" >
let div_5 = new Vue ( {
el: "#div_5" ,
data: {
color: "red" ,
fontsize: "30" ,
bold: {
fontSize: "20px" ,
fontWeight: "bold"
} ,
grey: {
color: "grey"
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_6" >
< p style =" color : rgb ( 57, 170, 47) ; " > 计算属性</ p>
< p> {{content}}</ p>
</ div>
< script type = " text/javascript" >
let div_6 = new Vue ( {
el: "#div_6" ,
data: {
name: "高万禄" ,
bike: "美利达"
} ,
computed: {
content: {
get ( ) {
return this . name + "骑" + this . bike;
} ,
set ( newdata) {
}
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_7" >
< p style =" color : rgb ( 57, 170, 47) ; " > methods与computed</ p>
< h4> computed会缓存,调用一次即可,methods每次都要执行</ h4>
< p> 方法调用:-{{showme()}}</ p>
< p> 计算属性:-{{content}}</ p>
</ div>
< script type = " text/javascript" >
let div_7 = new Vue ( {
el: "#div_7" ,
data: {
name: "高万禄" ,
bike: "美利达幻影"
} ,
computed: {
content ( ) {
return this . name + "骑" + this . bike;
}
} ,
methods: {
showme ( ) {
return this . name + "骑" + this . bike;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_8" >
< p style =" color : rgb ( 57, 170, 47) ; " > Vue.js绑定事件 更多事件请见官方文档</ p>
< p> {{count}}</ p>
< button v-on: click= " buttonClick" > 点击加一</ button>
< button @click = " add(10,$event)" > 点击加十</ button>
</ div>
< script type = " text/javascript" >
let div_8 = new Vue ( {
el: "#div_8" ,
data: {
count: 0 ,
} ,
methods: {
buttonClick ( ) {
this . count++ ;
} ,
add ( size, event) {
console. log ( event) ;
this . count += size;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_9" >
< p style =" color : rgb ( 57, 170, 47) ; " > 条件渲染</ p>
< p v-if = " score>=90" > 优秀</ p>
< p v-else-if = " score>=80" > 良好</ p>
< p v-else-if = " score>=60" > 及格</ p>
< p v-else > 不及格</ p>
</ div>
< script type = " text/javascript" >
let div_9 = new Vue ( {
el: "#div_9" ,
data: {
score: 59 ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_10" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-show</ p>
< p v-show = " isShow" >
HELLO
</ p>
< button v-on: click= " clickbutton" > 点击</ button>
</ div>
< script type = " text/javascript" >
let div_10 = new Vue ( {
el: "#div_10" ,
data: {
isShow: true ,
} ,
methods: {
clickbutton ( ) {
this . isShow = ! this . isShow;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_11" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-for遍历数组</ p>
< ul>
< li v-for = " item in person" > {{item.name}}</ li>
< li v-for = " (item,index) in person" > {{index}}-{{item.name}}-{{item.age}}岁</ li>
</ ul>
< button v-on: click= " click" > 响应式:反转</ button>
</ div>
< script type = " text/javascript" >
let div_11 = new Vue ( {
el: "#div_11" ,
data: {
person: [ {
name: '小明' ,
age: 18
} , {
name: '小敏' ,
age: 19
} , {
name: "小红" ,
age: 19
} , {
name: '万禄' ,
age: 19
} ]
} ,
methods: {
click ( ) {
this . person. reverse ( ) ;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_12" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-for遍历对象</ p>
< ul>
< li v-for = " (value,key,index) in obj" >
{{value}}-{{key}}-{{index}}
</ li>
</ ul>
</ div>
< script type = " text/javascript" >
let div_12 = new Vue ( {
el: "#div_12" ,
data: {
obj: {
name: "晓红" ,
age: 19 ,
email: "232vfs@163.com"
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_13" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-model表单绑定</ p>
< p> 输入内容为:{{data}}</ p>
< input type = " text" style =" width : 100%; height : 25px; " v-model = " data" placeholder = " 在此输入内容" >
</ div>
< script type = " text/javascript" >
let div_13 = new Vue ( {
el: "#div_13" ,
data: {
data: "" ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_14" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-model:radio</ p>
< label for = " male" >
< input type = " radio" v-bind: value= " abc" v-model = " choose" > 男
</ label>
< label for = " female" >
< input type = " radio" value = " female" v-model = " choose" > 女
</ label>
< p> 您的选择:{{choose}}</ p>
</ div>
< script type = " text/javascript" >
let div_14 = new Vue ( {
el: "#div_14" ,
data: {
data: "" ,
abc: "male" ,
choose: ""
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_15" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-model:checkbox</ p>
< label for = " check" >
< input type = " checkbox" v-model = " checked" id = " check" > 同意协议
</ label>
< p> 是否被选中:{{checked}}</ p>
< label> < input type = " checkbox" v-model = " phone" value = " 三星" > 三星</ label>
< label> < input type = " checkbox" v-model = " phone" value = " LG" > LG</ label>
< label> < input type = " checkbox" v-model = " phone" value = " 谷歌" > 谷歌</ label>
< p> 您选中的品牌:{{phone}}</ p>
</ div>
< script type = " text/javascript" >
let div_15 = new Vue ( {
el: "#div_15" ,
data: {
checked: false ,
phone: [ ] ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_16" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-model:checkbox</ p>
< p> {{myselect}}</ p>
< select v-model = " myselect" >
< option value = " apple" > 苹果</ option>
< option value = " orange" > 橘子</ option>
< option value = " banana" > 香蕉</ option>
</ select>
< p> {{myselect_m}}</ p>
< select v-model = " myselect_m" multiple >
< option value = " apple" > 苹果</ option>
< option value = " orange" > 橘子</ option>
< option value = " banana" > 香蕉</ option>
</ select>
</ div>
< script type = " text/javascript" >
let div_16 = new Vue ( {
el: "#div_16" ,
data: {
myselect: 'none' ,
myselect_m: [ ] ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_17" >
< p style =" color : rgb ( 57, 170, 47) ; " > v-model:修饰符</ p>
< p> {{data_1}}:{{typeof(data_1)}}</ p>
< label> v-model.number
< input type = " text" v-model.number = " data_1" >
</ label>
< p> {{data_2}}:{{typeof(data_2)}}</ p>
< label> v-model.lazy
< input type = " text" v-model.lazy = " data_2" >
</ label>
< p> {{data_3}}:{{typeof(data_3)}}</ p>
< label> v-model.trim
< input type = " text" v-model.trim = " data_3" >
</ label>
</ div>
< script type = " text/javascript" >
let div_17 = new Vue ( {
el: "#div_17" ,
data: {
data_1: "" ,
data_2: "" ,
data_3: ""
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_18" >
< p style =" color : rgb ( 57, 170, 47) ; " > component组件</ p>
< ul>
< game-item v-for = " item in games" v-bind: game= " item" > </ game-item>
</ ul>
</ div>
< script type = " text/javascript" >
Vue. component ( 'game-item' , {
props: [ 'game' ] ,
template: '<li>{{game.title}}</li>'
} ) ;
let div_18 = new Vue ( {
el: "#div_18" ,
data: {
games: [ {
title: "斗地主"
} ,
{
title: "打麻雀"
} ,
{
title: "UNO"
}
]
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_19" >
< p style =" color : rgb ( 57, 170, 47) ; " > 过滤器</ p>
< p> {{age | add}}</ p>
</ div>
< script type = " text/javascript" >
let div_19 = new Vue ( {
el: "#div_19" ,
data: {
age: 10 ,
} ,
filters: {
add: function ( value) {
return value + 1 ;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_20" >
< p style =" color : rgb ( 57, 170, 47) ; " > 观察属性</ p>
< p> 价格{{price}}</ p>
< p> {{age}}</ p>
< button v-on: click= " btnclick(1000)" > 加价</ button>
</ div>
< script type = " text/javascript" >
let div_20 = new Vue ( {
el: "#div_20" ,
data: {
price: 10 ,
age: 10 ,
} ,
watch: {
price: function ( newval, oldval) {
this . age = newval;
}
} ,
methods: {
btnclick: function ( newprice) {
this . price = this . price + newprice;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_21" >
< p style =" color : rgb ( 57, 170, 47) ; " > 组件基础中的基础</ p>
< hello> </ hello>
</ div>
< script type = " text/javascript" >
Vue. component ( 'hello' , {
template: '<h3>你好呀!</h3>'
} )
let div_21 = new Vue ( {
el: "#div_21" ,
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_22" >
< p style =" color : rgb ( 57, 170, 47) ; " > 局部的组件</ p>
< hello> </ hello>
</ div>
< script type = " text/javascript" >
let hello_component = {
template: '<h3>你好呀!</h3>'
} ;
let div_22 = new Vue ( {
el: "#div_22" ,
components: {
'hello' : hello_component,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_23" >
< p style =" color : rgb ( 57, 170, 47) ; " > 表行组件</ p>
< table border = " 1" >
< tr>
< td> 编号</ td>
< td> 名称</ td>
</ tr>
< tr is = " my-row1" > </ tr>
< tr is = " my-row2" > </ tr>
< tr is = " my-row3" > </ tr>
</ table>
</ div>
< script type = " text/javascript" >
Vue. component ( 'my-row1' , {
template: '<tr><td>1</td><td>长度</td></tr>'
} ) ;
Vue. component ( 'my-row2' , {
template: '<tr> <td > 2 </td> <td> 的 </td> </tr>'
} ) ;
Vue. component ( 'my-row3' , {
template: '<tr> <td > 2 </td> <td> 长度 </td> </tr>'
} ) ;
let div_23 = new Vue ( {
el: "#div_23" ,
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_24" >
< p style =" color : rgb ( 57, 170, 47) ; " > 组件数据</ p>
< my-row1> </ my-row1>
</ div>
< script type = " text/javascript" >
Vue. component ( 'my-row1' , {
template: '<h3>{{hello}}</h3>' ,
data ( ) {
return {
hello: "你好" ,
}
}
} ) ;
let div_24 = new Vue ( {
el: "#div_24" ,
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_25" >
< p style =" color : rgb ( 57, 170, 47) ; " > 为组件传递数据HTML->组件</ p>
< my-row1 :score = " 100" > </ my-row1>
</ div>
< script type = " text/javascript" >
Vue. component ( 'my-row1' , {
props: [ 'score' ] ,
template: '<h3>{{score}}:{{grade}}</h3>' ,
computed: {
grade ( ) {
if ( this . score > 90 ) {
return "优秀" ;
}
}
}
} ) ;
let div_25 = new Vue ( {
el: "#div_25" ,
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_26" >
< p style =" color : rgb ( 57, 170, 47) ; " > 为组件传递变量数据</ p>
< my-row1 :score = " score" > </ my-row1>
</ div>
< script type = " text/javascript" >
Vue. component ( 'my-row1' , {
props: [ 'score' ] ,
template: '<h3>{{score}}:{{grade}}</h3>' ,
computed: {
grade ( ) {
if ( this . score > 90 ) {
return "优秀" ;
}
}
}
} ) ;
let div_26 = new Vue ( {
el: "#div_26" ,
data: {
score: 100 ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_27" >
< p style =" color : rgb ( 57, 170, 47) ; " > 组件props参数验证</ p>
< my-row1 :score = " score" > </ my-row1>
</ div>
< script type = " text/javascript" >
Vue. component ( 'my-row1' , {
props: {
score: {
type: Number,
validator ( value) {
return value >= 0 && value <= 100 ;
} ,
default ( ) {
return 0 ;
} ,
required: false ,
}
} ,
template: '<h3>{{score}}:{{grade}}</h3>' ,
computed: {
grade ( ) {
if ( this . score > 90 ) {
return "优秀" ;
}
}
}
} ) ;
let div_27 = new Vue ( {
el: "#div_27" ,
data: {
score: 91 ,
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_28" >
< p style =" color : rgb ( 57, 170, 47) ; " > 事件传递:子组件注册v-on事件</ p>
< h3> 6+12={{result}}</ h3>
< add-method :a = " 6" :b = " 12" v-on: add_event= " getAddResult" > </ add-method>
</ div>
< script type = " text/javascript" >
Vue. component ( 'add-method' , {
props: [ 'a' , 'b' ] ,
template: '<div><button v-on:click="add">加欧</button></div>' ,
methods: {
add: function ( ) {
var value = 0 ;
value = this . a + this . b;
this . $emit ( 'add_event' , {
result: value
} ) ;
}
}
} ) ;
let div_28 = new Vue ( {
el: "#div_28" ,
data: {
result: "?" ,
} ,
methods: {
getAddResult ( pval) {
this . result = pval. result;
}
}
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_29" >
< p style =" color : rgb ( 57, 170, 47) ; " >
组件:slot插槽
slot是父组件与子组件的通讯方式,可以将父组件的内容显示在子组件中
</ p>
< say-to pname = " mike" >
你的教程太好了
</ say-to>
</ div>
< script type = " text/javascript" >
Vue. component ( 'say-to' , {
props: [ 'pname' ] ,
template: '<div>' +
'你好,<strong>{{pname}}<strong>' +
'<slot></slot>' +
'</div>' ,
} ) ;
let div_29 = new Vue ( {
el: "#div_29" ,
} ) ;
</ script>
< div class = " line" > </ div>
< div id = " div_30" >
< p style =" color : rgb ( 57, 170, 47) ; " >
组合slot:
在子组件中通过为多个slot进行命名,来接受父组件的不同内容的数据
</ p>
< say-to pname = " mike" >
< p slot = " 1" > 你的教程太好了</ p>
< p slot = " 2" > 真的吗</ p>
< p slot = " 3" > 好像挺不错的</ p>
</ say-to>
</ div>
< script type = " text/javascript" >
Vue. component ( 'say-to' , {
props: [ 'pname' ] ,
template: '<div>' +
'你好,<strong>{{pname}}<strong>' +
'<slot name="1"></slot>' +
'<slot name="2"></slot>' +
'<slot name="3"></slot>' +
'</div>' ,
} ) ;
let div_30 = new Vue ( {
el: "#div_30" ,
} ) ;
</ script>
</ body>
</ html>