- 发布:2022-10-26 22:53
- 更新:2022-11-14 21:57
- 阅读:803
呆狗的一生 - 呆狗的一生
你应该转成 number类型再进行运算;例如:
times.value = ( new Date().getTime() - new Date(times).getTime() ) / 1000
呆狗的一生 - 呆狗的一生
例如:在 js 中 let str = 1 + "1" 是ok的,是可以运行的。但在 ts 中则会提示错误,其实也是能编译成功的。
-
回复 1***@qq.com: 第3张图,parseInt函数,期望接收一个 string 类型的参数,返回一个number值。但你给了一个 number 类型的参数
改成 parseInt( (times.value / 86400).toString() )2022-10-27 00:10
-
1***@qq.com (作者)
回复 呆狗的一生: 大哥,你好牛啊,我看了半天没看懂,第四张图呢,我用async 怎么也报错,应该不是类型错误了吧,这些问题我查了好久
2022-10-27 00:17
呆狗的一生 - 呆狗的一生
你用了 setup
了吗?这种方式我没有用过,你这个页面方便发我看看吗
-
1***@qq.com (作者)
回复 1***@qq.com: export default {
components: {
popups,
},
setup() {
const store = useStore();
const myInfo = ref<any>({});
const isLove = ref<boolean>(store.state.isLove);
const isShow = ref<boolean>(false);
const isLogin = ref<boolean>(store.state.isLogin);
const userTwoData = ref<any>({});
const times = ref<number>(0);
//时间计算
const isShowSetTime = ref<boolean>(false); //时间切换显示
const usersImages = ref<string[]>([]); //两个头像图片
const setTimeValue = ref<string>(""); //打开时间选择器对应的时间节点
// watch(isLogin, async (newQuestion, oldQuestion) => {
// if (oldQuestion) {
// isShow.value = false
// }
// })
const onClickToXQday = async (e: any) => {
uni.navigateTo({
url: `../playCard/playCard`,
});
// isShow.value = true
};
//子组件登入返回触发的逻辑
const handleEven = () => {
///``````
let userInfo = uni.getStorageSync("userInfo");
console.log(222, userInfo);
myInfo.value = userInfo;
uni.hideLoading();
isLogin.value = true;
isShow.value = false;
};
const handleToAtlas = () => {
uni.navigateTo({
url: `../atlasImg/atlasImg`,
});
};
//进入页面之前的处理逻辑
const handleIsLogin = async () => {
///``````
let userInfo = uni.getStorageSync("userInfo");
if (userInfo) {
//已登入
store.state.isLogin = true;
handleIsLoveBind(); //判断是否绑定
myInfo.value = userInfo;
isLogin.value = true;
} else {
//未登入,但数据库里有,获取第一次登入
await getUerOpenidToken();
if (store.state.isLogin == true) {
let userInfo = uni.getStorageSync("userInfo");
myInfo.value = userInfo;
handleIsLoveBind(); //
isLogin.value = true;
} else {
isShow.value = true;
}
}
};
//时间选择 点击确定触发
const changeTime = async (e: any) => {
let { data } = await setUserTogetherTime(e);
handleTimesData(data);
};
//时间转换,加减日期,得出在一起的时间
const handleTimesData = (startTime: String) => {
//起始时间
let timess: any = startTime.replace(new RegExp("-", "gm"), "/"); //转换格式 -- //
times.value = (new Date().getTime() - new Date(timess).getTime()) / 1000;
times.value = Number(parseInt((times.value / 86400).toString()));
console.log(111222, typeof times.value);
times.value >= 0 ? times.value : (times.value = 0);
isShowSetTime.value = true;
};
//判断当前登入的用户是否有绑定用户
const handleIsLoveBind = async () => {
///``````
const { data } = await isLoveBind();
if (data.type === 1) {
userTwoData.value = data.twoUserData;
store.state.twoUserData = data.twoUserData; //恋人数据存入 状态管理
store.state.loveKey = data.twoUserData[0].love_key; //恋人key 状态管理
isLove.value = true;
if (data.date != null) {
handleTimesData(data.date);
}
}
};
// #ifndef H5 || APP-PLUS
onShareAppMessage(async () => {
const userInfo = uni.getStorageSync("userInfo");
const openid = uni.getStorageSync("openid");
const code = getRandomCode(12);
const codeData = {
code, //生成12位邀请码
createTime: new Date(),
};
await addInviteCode(code, "add");
return {
title: "我们的私有空间",
path: `/pages/loginReceived/loginReceived?openId=${openid}&nickname=${userInfo.user_name}&avatarUrl=${userInfo.avatar_url}&code=${code}`,
imageUrl:
"https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fc-ssl.duitang.com%2Fuploads%2Fitem%2F202002%2F10%2F20200210120355_snutr.jpg&refer=http%3A%2F%2Fc-ssl.duitang.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1665846069&t=247f575138e711bf4835f630329a8af3", //分享图标,路径可以是本地文件路径、代码包文件路径或者网络图片路径.支持PNG及JPG。显示图片长宽比是 5:4
};
});
// #endif
onShow(async () => {
console.log(store.state.isLove);
});
onLoad(async () => {
await handleIsLogin();
});
return {
isLove,
myInfo,
isLogin,
userTwoData,
times,
onClickToXQday,
isShow,
handleEven,
handleToAtlas,
usersImages,
changeTime,
isShowSetTime,
setTimeValue,
};
},
2022-10-27 22:32
呆狗的一生 - 呆狗的一生
我是用的这样的
export default {
onShareAppMessage(res) {
if (res.from === 'button') {// 来自页面内分享按钮
console.log(res.target)
}
return {
title: '自定义分享标题',
path: '/pages/test/test?id=123'
}
}
}
呆狗的一生 - 呆狗的一生
我也没有用过setup
来写uniapp。刚才我看了下,uniapp
内置的声明文件,截取了下面的三处声明。一起学习:
declare interface CustomShareAppMessage {
title?: string;
path?: string;
imageUrl?: string;
}
declare type onShareAppMessageHook = (options: ShareAppMessageOption) => CustomShareAppMessage | void;
export declare const onShareAppMessage: (hook: onShareAppMessageHook, target?: ComponentInternalInstance | null) => any;
得出结论,传递给onShareAppMessage的回调函数,应该返回一个CustomShareAppMessage
类型的对象,而你返回的是一个Promise(备注,所有async函数都是返回一个promise,这点不赘述),所以不应该加 async
(并弃用await),而你在返回结果之前要进行异步操作,所以我也不知道怎么办,才是最佳方案。经我分析了良久,得出一个结论:uniapp的内置声明文件写错了。应该改为如下
declare type onShareAppMessageHook = (options: ShareAppMessageOption) => Promise<CustomShareAppMessage > | CustomShareAppMessage | void;
改了之后,就不会报错了。
呆狗的一生 - 呆狗的一生
onShareAppMessage
目前不支持返回一个promise,更多信息可以查看关于onShareAppMessage的声明文件。你代码里的,可以去掉async和await,就行了。
呆狗的一生 - 呆狗的一生
HBuilder 3.6.9,修改了关于onShareAppMessage
的声明文件,https://ask.dcloud.net.cn/question/156262,用async函数不会报错了。