vue-meteor-tracker 不获取当前用户
vue-meteor-tracker not fetching current user
我是 Vuejs 和 Meteorjs 的新手,所以如果这些是新手问题或语法错误,请原谅。
我正在尝试使用 vue-meteor-tracker
更新 login\register 按钮以注销,但我无法这样做。 Meteor.user
始终未定义。
我错过了什么?
base.js:
import { Meteor } from 'meteor/meteor';
export default {
meteor:
{
$lazy: true,
$subscribe:
{
'currentUser': function() {
return Meteor.user();
},
'currentUserId': function() {
return Meteor.userId();
}
},
},
}
plugins.js
import VueMeteorTracker from 'vue-meteor-tracker';
Vue.use(VueMeteorTracker);
MainNavBar.vue
<li v-if="($parent.currentUserId==null)">
<router-link v-bind:to="{ name: 'register' }">Register</router-link></li>
<li v-else>
<router-link v-bind:to="{ name: 'register' }">Log out</router-link></li>
<script>
import base from '../base';
export default
{
extends: base,
components:{
},
mounted()
{
console.log(this.$parent.currentUserId);
}
}
</script>
Login.Vue:
<script>
import '../api/methods.js';
import { Meteor } from 'meteor/meteor';
import base from './base';
export default
{
extends: base,
methods:
{
LoginUserForDomain()
{
Meteor.call('loginUserForDomain', this.user.email, this.user.password, this.user.domain,
(error, result) =>
{
if(result && result.userId && result.domain)
{
Meteor.loginWithPassword(email, password);
this.$router.push({ name: 'dashboard', params: { domain: result.domain }});
return;
}
}
);
},
},
当您未登录时,Meteor.user() 将始终 return undefined。因此您的登录逻辑不起作用。我不确定你在做什么,但你应该使用 'Meteor.loginWithPassword' 在客户端上登录。 'loginUserForDomain' 有什么用?
我不明白 Meteor.loginWithPassword(email, password);
因为 'email' 和 'password' 都是未定义的(应该是 this.user.email 吗?)。 'this.user.email' console.log 还有什么吗?
根据我在 Meteor forums 中的回复,您是 $subscribing
到 currentUser
和 currentUserId
而不是将它们定义为反应性数据。此外,您不需要 publish/subscribe 当前用户的 userId,因为它在客户端中始终可用 Meteor.userId()
.
Meteor.userId()
是一个响应式数据源,您可以像这样使用 vue-meteor-tracker
将其转换为 Vue 响应式 属性:例如:在 App.vue:
内
<script>
import { Meteor } from 'meteor/meteor';
export default {
meteor: {
currentUserId() {
return Meteor.userId();
},
},
}
</script>
然后您可以在任何模板中使用它,例如v-if="$root.currentUserId"
,或在任何组件的代码中作为 this.$root.currentUserId
。
在这个简单的示例中,我使用根 Vue 实例作为易于访问的全局数据存储,但使用 dedicated data store, or use Vuex.
更被广泛接受
我是 Vuejs 和 Meteorjs 的新手,所以如果这些是新手问题或语法错误,请原谅。
我正在尝试使用 vue-meteor-tracker
更新 login\register 按钮以注销,但我无法这样做。 Meteor.user
始终未定义。
我错过了什么?
base.js:
import { Meteor } from 'meteor/meteor';
export default {
meteor:
{
$lazy: true,
$subscribe:
{
'currentUser': function() {
return Meteor.user();
},
'currentUserId': function() {
return Meteor.userId();
}
},
},
}
plugins.js
import VueMeteorTracker from 'vue-meteor-tracker';
Vue.use(VueMeteorTracker);
MainNavBar.vue
<li v-if="($parent.currentUserId==null)">
<router-link v-bind:to="{ name: 'register' }">Register</router-link></li>
<li v-else>
<router-link v-bind:to="{ name: 'register' }">Log out</router-link></li>
<script>
import base from '../base';
export default
{
extends: base,
components:{
},
mounted()
{
console.log(this.$parent.currentUserId);
}
}
</script>
Login.Vue:
<script>
import '../api/methods.js';
import { Meteor } from 'meteor/meteor';
import base from './base';
export default
{
extends: base,
methods:
{
LoginUserForDomain()
{
Meteor.call('loginUserForDomain', this.user.email, this.user.password, this.user.domain,
(error, result) =>
{
if(result && result.userId && result.domain)
{
Meteor.loginWithPassword(email, password);
this.$router.push({ name: 'dashboard', params: { domain: result.domain }});
return;
}
}
);
},
},
Meteor.user() 将始终 return undefined。因此您的登录逻辑不起作用。我不确定你在做什么,但你应该使用 'Meteor.loginWithPassword' 在客户端上登录。 'loginUserForDomain' 有什么用?
我不明白 Meteor.loginWithPassword(email, password);
因为 'email' 和 'password' 都是未定义的(应该是 this.user.email 吗?)。 'this.user.email' console.log 还有什么吗?
根据我在 Meteor forums 中的回复,您是 $subscribing
到 currentUser
和 currentUserId
而不是将它们定义为反应性数据。此外,您不需要 publish/subscribe 当前用户的 userId,因为它在客户端中始终可用 Meteor.userId()
.
Meteor.userId()
是一个响应式数据源,您可以像这样使用 vue-meteor-tracker
将其转换为 Vue 响应式 属性:例如:在 App.vue:
<script>
import { Meteor } from 'meteor/meteor';
export default {
meteor: {
currentUserId() {
return Meteor.userId();
},
},
}
</script>
然后您可以在任何模板中使用它,例如v-if="$root.currentUserId"
,或在任何组件的代码中作为 this.$root.currentUserId
。
在这个简单的示例中,我使用根 Vue 实例作为易于访问的全局数据存储,但使用 dedicated data store, or use Vuex.
更被广泛接受