uniapp是基於Vue框架開發的跨平台應用開發框架,能夠同時生成iOS、Android和H5等多個平台的應用程序。在uniapp開發中,頁面之間的參數傳遞無疑是一個非常核心的部分。接下來我們從多個方面對uniapp頁面傳值做詳細的闡述。
一、uniapp頁面傳值異步
在uniapp開發中,頁面傳值的方式有很多種。最為常見的是異步傳值方式,即先打開目標頁面,然後再傳遞參數過去。下面是一個簡單的傳遞字符串的例子:
//在當前頁面傳遞參數
uni.navigateTo({
url: 'targetPage?message=hello',
success: function() {
console.log('success');
}
});
//在目標頁面接收參數
export default {
data() {
return {
message: ''
}
},
onLoad(options) {
this.message = options.message;
console.log(this.message); //hello
}
}
通過上述代碼可以看到,使用uni.navigateTo跳轉到目標頁面時,在url的後面拼接參數message=hello,目標頁面可以通過onLoad生命周期函數中的options參數獲取到當前頁面傳遞過來的參數,並將其賦值到本頁面的data屬性中。
二、uniapp頁面傳對象
除了傳遞字符串,我們還可以將對象傳遞給目標頁面。同樣地,在當前頁面先打開目標頁面,然後將對象通過url參數傳遞過去。目標頁面同樣可以通過onLoad生命周期函數中的options參數獲取到當前頁面傳遞過來的參數,然後將其賦值到本頁面的data屬性中。下面是一個傳遞對象的例子:
//在當前頁面傳遞參數
uni.navigateTo({
url: 'targetPage?name=張三&age=18',
success: function() {
console.log('success');
}
});
//在目標頁面接收參數
export default {
data() {
return {
person: {}
}
},
onLoad(options) {
this.person.name = options.name;
this.person.age = options.age;
console.log(this.person); //{name: "張三", age: "18"}
}
}
三、uniapp頁面傳值的幾種方式
1. uniapp頁面之間傳值
在uniapp頁面之間傳遞數據,除了可以使用異步傳值方式,還可以使用全局變量、緩存、Vuex等方式實現。下面是使用全局變量傳值的示例:
//在main.js文件中定義全局變量
Vue.prototype.global = {
message: ''
}
//在當前頁面設置全局變量的值
this.global.message = 'hello';
//在目標頁面獲取全局變量的值
console.log(this.global.message); //hello
2. uniapp頁面傳參數
除了使用url參數傳遞數據,還可以在跳轉頁面時通過query參數傳遞數據。與url參數傳遞數據的方式類似,只需要在生成路由時傳遞參數即可。下面是一個使用query參數傳遞數據的示例:
//在當前頁面傳遞參數
uni.navigateTo({
url: 'targetPage?name=張三&age=18',
query: {
message: 'hello'
},
success: function() {
console.log('success');
}
});
//在目標頁面獲取query參數的值
console.log(this.$route.query.message); //hello
3. uniapp頁面之間傳遞參數
在uniapp中,頁面之間可以通過事件總線傳遞參數。我們可以在全局掛載一個事件總線,然後不同的頁面通過事件總線進行傳遞信息。下面是使用事件總線傳遞參數的示例:
//在main.js文件中定義事件總線
Vue.prototype.eventBus = new Vue();
//在發送頁面發送事件
this.$eventBus.$emit('message', 'hello');
//在接收頁面接收事件
mounted() {
this.$eventBus.$on('message', message => {
console.log(message); //hello
})
}
四、uniapp傳值方法
在uniapp中,頁面之間的傳值方式非常多,我們可以根據不同的需求選擇合適的傳值方式。下面是一個匯總uniapp傳值方法的示例:
export default {
data() {
return {
person: {},
message: '',
count: 0
}
},
computed: {
doubleCount() {
return this.count * 2;
}
},
methods: {
handleClick() {
//使用異步傳值方式
uni.navigateTo({
url: 'targetPage?name=張三&age=18',
success: function() {
console.log('success');
}
});
//使用全局變量傳值方式
this.global.message = 'hello';
//使用query參數傳值方式
uni.navigateTo({
url: 'targetPage?name=張三&age=18',
query: {
message: 'hello'
},
success: function() {
console.log('success');
}
});
//使用事件總線傳遞參數
this.$eventBus.$emit('message', 'hello');
}
}
}
五、uniapp組件傳值
在uniapp中,組件之間也需要傳值。與頁面傳值相同,我們也可以通過props、$emit、事件總線等方式進行組件之間的傳值。下面是一個使用props傳值的示例:
//在父組件中傳遞參數原創文章,作者:PAPS,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/149384.html
微信掃一掃
支付寶掃一掃