fetch("**").then(res=>res.json()).then(res=>{console.log(res)})
fetch("**").then(res=>res.text()).then(res=>{console.log(res)})
fetch("**",{
method:'post',
headers: {
"Content‐Type": "application/x‐www‐form‐urlencoded"
},
body: "name=kerwin&age=100"
}).then(res=>res.json()).then(res=>{console.log(res)});
fetch("/users",{
method:'post',
credentials: 'include',
headers: {
"Content‐Type": "application/json"
},
body: JSON.stringify({
name:"kerwin",
age:100
})
}).then(res=>res.json()).then(res=>{console.log(res)});
fetch("./json/test.json").then(res=>res.json()).then(res=>{
console.log(res.data.films)
this.datalist = res.data.films
})
axios.get("")
promise对象axios.post("")
promise对象axios.put("")
axios.delete("")
axios({
url:"/gateway?type=2&k=3553574",
headers:{
'X‐Client‐Info': '{"a":"3000","ch":"1002","v":"1.0.0","e":"1"}',
'X‐Host': 'mall.cfg.common‐banner'
}
}).then(res=>{
console.log(res.data);
})
axios.get("./json/test.json").then(res=>{
console.log(res.data.data.films) // axios 自动包装data属性 res.data
this.datalist = res.data.data.films
}).catch(err=>{
console.log(err);
})
{ {myname.substring(0,1).toUpperCase() + myname.substring(1)}}
计算属性:{
{getMyName}}
computed:{
getMyName(){
console.log("getMyName-计算属性调用")
return this.myname.substring(0,1).toUpperCase() + this.myname.substring(1)
} //1. 依赖的状态改变了 ,计算属性 会重新计算一遍 2. 计算属性会缓存
}
普通方法:{
{getMyNameMethod()}}
methods:{
getMyNameMethod(){
console.log("getMyNameMethod-方法调用")
return this.myname.substring(0,1).toUpperCase() + this.myname.substring(1)
}
},
【注意】console.log()
计算属性是基于它们的依赖进行缓存的。
计算属性只有在它的相关依赖发生改变时才会重新求值,而method只要有函数就会执行
【因此】计算属性的方法性能更高
【实例:模糊查询】
data in getMyDatalist
(getMyDatalist为计算属性中的函数名)
-
{
{data}}
computed: {
getMyDatalist(){
return this.datalist.filter(item=>item.indexOf(this.mytext)>-1)
}
},
watch
watch的作用可以监控一个值的变换,并调用因为变化需要执行的方法。
可以通过watch动态改变关联的状态。
new Vue({
el:"#box",
data:{
price:100,
number:1,
sum:0
},
watch:{
price(){
console.log("price状态改变了")
if(this.number*this.price>=1000){
this.sum = this.number*this.price
}else{
this.sum = this.number*this.price+100
}
} ,
number(){
console.log("number状态改变了")
if(this.number*this.price>=1000){
this.sum = this.number*this.price
}else{
this.sum = this.number*this.price+100
}
}
},
methods:{
mysum(){
var sum =this.price*this.number
if(sum>=1000){
return sum;
}else{
return sum+100
}
}
},
computed:{
mycomptedsum(){
var sum =this.price*this.number
if(sum>=1000){
return sum;
}else{
return sum+100
}
}
}
})
【计算属性】:
【watch】:
1. 不支持缓存,数据变,直接会触发相应的操作;
2. watch支持异步;
3. 监听的函数接收两个参数,第一个参数是最新的值;第二个参数是输入之前的值;
4. 当一个属性发生变化时,需要执行对应的操作;一对多;
5. 监听数据必须是data中声明过或者父组件传递过来的props中的数据,当数据变化时,触发其他操作,函数有两个参数:
immediate:组件加载立即触发回调函数执行,
deep: 深度监听,为了发现对象内部值的变化,复杂类型的数据时使用,例如数组中的对象内容的改变,注意监听数组的变动不需要这么做。
【注意】:deep无法监听到数组的变动和对象的新增,参考vue数组变异,只有以响应式的方式触发才会被监听到。
【使用总结】:当需要在数据变化时执行异步或开销较大的操作时,最好使用watch。
v-model
// 定义一个混入对象
var myMixin = {
created: function () {
this.hello()
},
methods: {
hello: function () {
console.log('hello from mixin!')
}
}
}
// 定义一个使用混入对象的组件
var Component = Vue.extend({
mixins: [myMixin]
})
var component = new Component() // => "hello from mixin!"
【作用】减少重新创建,提高复用性。提高性能。
【目的】:扩展 HTML 元素,封装可重用的代码
Vue.component("navbar",{
template:`
navbar--{
{navbarname}}
`,
methods:{
handleback(){
console.log("back")
}
})
父子组件的data是无法共享
组件可以有data,methods,computed…,但是data 必须是一个函数
data(){
return {
navbarname:"navbarname"
}
},
props:[“myname”,“myshow”] // 接受父组件传来的属性
子组件调用自身方法,利用$emit()分发、触发事件(事件定义在父组件payMoney)
属性验证
props:{name:Number}
props:{
myname:String,
myshow:Boolean
}
iii. 事件机制
使用 $on(eventName) 监听事件
使用 $emit(eventName) 触发事件
【ref放在标签上, 拿到的是原生节点】
不需要使用v-model双向数据绑定,利用ref传递参数
【ref放在组件上, 拿到的是组件对象,实现父子通信】
this.$refs.mytext