https://segmentfault.com/a/1190000010960666
https://blog.csdn.net/qq_31201781/article/details/78778193 vue nginx代理接口请求
v-text {{msg}} 是输出原文本,不会渲染html页面
v-text 会替换掉标签内的值,{{msg}} 不会替换,但是会有闪烁问题
v-html 可以渲染html页面
-
v-bind 用来绑定属性并赋值,可以简写为 :
<button v-bind:title="mytitle+1232"></button>
<button :title="mytitle+1232">v-bind</button>
v-on 绑定事件 可以用@代替
.stop阻止冒泡
<div id="app">
<!-- 注意修饰符可以串联的 -->
<!-- 阻止默认 -->
<!-- 使用once只触发一次事件 -->
<a href="http//:www.baidu.com" @click.prevent.once="du">baidu once</a>
<!-- 阻止冒泡事件 -->
<div class="outer" @click="outer"> <div class="inner1" @click="d"><button class="inner" value="" @click.stop="btn">戳他</button></div></div>
<div class="outer" @click="outer"> <div class="inner1" @click.stop="d"><button class="inner" value="" @click="btn">戳他</button></div></div>
<!-- 捕获出发事件 -->
<div class="inner1" @click.capture="d"><button class="inner" value="" @click.capture="btn">戳他</button></div>
<!-- 只有事件本身才触发事件 和stop的区别,stop阻止当前元素及其后面元素的的冒泡,self只负责自己的冒泡,不负责别人的冒泡-->
<div class="inner1" @click.self="d"><button class="inner" value="" @click.self="btn">戳他</button></div>
</div>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<style>
[v-cloak] {
display: none;
}
</style>
<body>
<div id="app">
<!-- 解决数据初始化闪烁问题 -->
<p v-cloak>
<!-- 以下渲染有闪烁问题,插值表达式,只会渲染自己的值,不会替换其他的值 -->
+++++{{ msg }}--------
</p>
<p>
{{msg2}}
</p>
<!-- v-text不存在闪烁问题,数据渲染会替换原来的数据 -->
<h3 v-text="msg">---+++=====</h3>
<div v-text="msg2">
</div>
<div v-html="msg2">
</div>
</div>
<!-- 总结 -->
<!--
v-text {{msg}} 是输出原文本,不会渲染html页面
v-text 会替换掉标签内的值,{{msg}} 不会替换,但是会有闪烁问题
v-html 可以渲染html页面
-->
<script src="lib/vue.js"></script>
<script>
var vm=new Vue({
el:"#app",
data:{
msg:'123',
msg2:"<h1>i am h1</h1>",
}
})
</script>
</body>
</html>
- 利用vue定义类和样式
<body>
<script src="lib/vue.js"></script>
<div id="app">
<!-- 类名必须用单引号包含起来 数组中可以使用三元表达式 -->
<h1 :class="['thin','pink',flag? 'active': '']">big h1</h1>
<!-- 利用对象形式去写 -->
<h1 :class="['thin','pink',{'active':false}]">big h1</h1>
<!-- 在用v-bind绑定类的时候, -->
<h1 :class="classobj">big h1</h1>
<!-- 行内样式 -->
<h3 :style="stobj">this is h3</h3>
<!-- 多对象定义样式 -->
<h3 :style="[stobj,stobj1]">this is h3</h3>
</div>
<script>
var vm=new Vue({
el:"#app",
data:{
flag:true,
classobj:{thin:true,pink:true},
stobj:{color:'green','font-weight':200},
stobj1:{color:'pink'},
},
methods:{
}
})
</script>
- v-for 的使用
<!-- view 层 -->
<div id="app">
<!-- 循环普通数组 -->
<p v-for="(item,i) in list">
value: {{item}} ------------key: {{i}}
</p>
<!-- 循环对象数组 -->
<p v-for="(item,i) in list1">
value: {{item.name}} ------------key: {{i}}
</p>
<!-- 遍历对象,遍历对象身上的价值对的时候,除了有v-k之外,在第三个位置有索引 -->
<p v-for="(value,key,i) in list2">
value: {{value}} ------------key: {{key}}------index:{{i}}
</p>
<!-- v-for 迭代数字, -->
<p v-for="count in 10">这是第{{count}}次循环</p>
<!-- v-for循环的时候key属性只能使用number 或者string,
key在使用的时候必须使用v-bind制定属性绑定
用key来保证每条数据的唯一性和关联性
-->
<p v-for="(item,i) in list1" :key="item.id">
<input type="checkbox"> {{item.id}}-----{{item.name}}
</p>
</div>
<script src="lib/vue.js"></script>
<script>
// vm层
var vm= new Vue({ //Vue 第一个字母大写
el:'#app',//表示vue要控制页面上的哪个区域--在哪个区域渲染数据,
data:{
list2:{id:1,name:'lisi'},
list1:[{id:1,name:'lisi'},{id:1,name:'lisi'},{id:1,name:'lisi'},{id:1,name:'lisi'}],
list:[1,2,3,4,5,6,7],
msg:'lean vue'//通过vue的指令渲染数据--不提倡手动操作dom元素
},//存放el所用到的数据
})
</script>
- v-show v-if
<!-- view 层 -->
<div id="app">
<button @click="ch">change flag</button>
<button @click="flag=!flag">change flag</button>
<!-- v-if 元素被移除 较高的切换性能消耗,v-show是元素被隐藏,有较高的渲染消耗 -->
<h3 v-if="flag">v-if 的元素</h3>
<h3 v-show="flag">v-show 的元素</h3>
</div>
<script src="lib/vue.js"></script>
<script>
// vm层
var vm= new Vue({ //Vue 第一个字母大写
el:'#app',//表示vue要控制页面上的哪个区域--在哪个区域渲染数据,
data:{
flag:true,
msg:'lean vue'//通过vue的指令渲染数据--不提倡手动操作dom元素
},//存放el所用到的数据
methods:{
ch(){
this.flag=!this.flag
}
}
})
</script>
过滤器filter的使用
<body>
<!-- view 层 -->
<div id="app">
{{msg | msgFormat("ni hao",'123') | f2}}
</div>
<script src="lib/vue.js"></script>
<script>
//定义一个过滤器 参数以第一个位置永远是msg,就是过滤器前面第一个值
Vue.filter('msgFormat',function(msg,a,b){
return msg.replace(/vue/g,2);
})
Vue.filter('f2',function(msg){
return msg+'====';
})
// vm层
var vm= new Vue({ //Vue 第一个字母大写
el:'#app',//表示vue要控制页面上的哪个区域--在哪个区域渲染数据,
data:{
msg:'lean vue vue01 vue02 vue03'//通过vue的指令渲染数据--不提倡手动操作dom元素
},//存放el所用到的数据
})
</script>
- vue的http请求 https://www.cnblogs.com/Juphy/p/7073027.html
- vue刷新后404 https://www.cnblogs.com/juewuzhe/p/7083836.html
- vue-resource 发起http请求
jsonp请求原理介绍
客户端
<script>
function getInfo(e){
console.log(e)
}
</script>
<script src="http://127.0.0.1/vue10/api.php?callback=getInfo"></script>
服务端
<?php
$arr=array(
['name'=>'xiaoming','age'=>24,'sex'=>'man'],
['name'=>'xiaoming1','age'=>24,'sex'=>'man'],
['name'=>'xiaoming2','age'=>24,'sex'=>'man'],
['name'=>'xiaoming3','age'=>24,'sex'=>'man'],
);
$func=$_GET['callback'];
$str=json_encode($arr);
echo $func.'('.$str.')';die;
echo 'getInfo(1111)';die;
常用命令
v-for="item in list" :key="item.id"
- 组件定义的方法:
<div id="app">
<com1></com1>
<com2></com2>
</div>
<template id="tmp1">
<div>
<h1>i am tmp1</h1>
</div>
</template>
<template id="tmp2">
<div>
<h1>i am tmp2</h1>
</div>
</template>
// 第一种方式 全局定义
// 直接挂在到vue身上
Vue.component("com1",{
template:"#tmp1"
})
//第二种方式 局内定义 需要实例去挂载
var com2={
template:"#tmp2",
props: ['title'],
methods:{
show(){
console.log(this.title)
}
}
}
// vm层
var vm= new Vue({ //Vue 第一个字母大写
el:'#app',//表示vue要控制页面上的哪个区域--在哪个区域渲染数据,
data:{
hight:'i am 50',
list:[
{id:Date.now(),user:'libai',content:'i am libai'},
{id:Date.now(),user:'libai0',content:'i am libai0'},
{id:Date.now(),user:'libai00',content:'i am libai00'},
]
},//存放el所用到的数据
components:{
com2
}
})
</script>
- 组件获取父组件的属性
给组件赋值的方法
<div id="app">
<com1></com1>
//注意:其实给组件赋值用的是props,如果要用父组件赋值,当然要bind一下啦
<com2 :title="hight"></com2>
</div>
<template id="tmp1">
<div>
<h1>i am tmp1</h1>
</div>
</template>
<template id="tmp2" v-bind:title="4444">
<div>
<h1>i am tmp2</h1>
<button @click="show">click me </button>
</div>
</template>
<script src="lib/vue.js"></script>
<script>
// 第一种方式 全局定义
// 直接挂在到vue身上
Vue.component("com1",{
template:"#tmp1"
})
//第二种方式 局内定义 需要实例去挂载
var com2={
template:"#tmp2",
props: ['title'],
methods:{
show(){
console.log(this.title)
}
}
}
// vm层
var vm= new Vue({ //Vue 第一个字母大写
el:'#app',//表示vue要控制页面上的哪个区域--在哪个区域渲染数据,
data:{
hight:'i am 50',
list:[
{id:Date.now(),user:'libai',content:'i am libai'},
{id:Date.now(),user:'libai0',content:'i am libai0'},
{id:Date.now(),user:'libai00',content:'i am libai00'},
]
},//存放el所用到的数据
components:{
com2
}
})
</script>
- 方法绑定
在外面方法传递进去 show就是vue身上的方法
<com2 :title="hight" @fun="show"></com2>
//在component里面
methods:{
myclick(){
this.$emit('fun')
}
}
- 路由简单实用
- 注意:先定义组件啊,要不然调取不到
<div id="app">
<!-- 不推荐使用的#的a标签 -->
<a href="#/login">点我登录</a>
<a href="#/reg">点我注册</a>
<!-- 通过tag 定义标签的名称 -->
<router-link to="login" tag="span">login</router-link>
<router-link to="reg">reg</router-link>
<router-view></router-view>
</div>
<script>
// 1.引入包 2.创建router对象,3.该关联vm 4.页面放容器
var login={
template:"<h1>我是login</h1>"
}
var reg={
template:"<h1>我是reg</h1>"
}
//创建路由对象
var routerObj = new VueRouter({
routes:[
// 属性1 监听的链接地址
// 属性2 是compotent,便是展示的对应页面 跟的对象名称
{path:'/',redirect:'/login'},
{path:'/login',component:login},
{path:'/reg',component:reg},
] //表示路由匹配规则
})
// vm层
var vm= new Vue({ //Vue 第一个字母大写
el:'#app',//表示vue要控制页面上的哪个区域--在哪个区域渲染数据,
data:{
msg:'lean vue'//通过vue的指令渲染数据--不提倡手动操作dom元素
},//存放el所用到的数据
router:routerObj,
})
</script>