admin管理员组文章数量:1405393
I have a Vue ponent that requires
a file that is a Vue mixin. The file that is required is part of a vendor package so I cannot modify that file. I need to get the notifications
prop from the mixin. The end result is that I am going to access the notifications
object and get the amount of read notifications so that I display this count as a puted property. It seems that using this.notifications
does not work. How can I do this?
Here is my ponent:
var base = require('notifications/notifications');
Vueponent('spark-notifications', {
mixins: [base],
});
Here is the notifications
file that was required in the previous ponent:
module.exports = {
props: ['notifications', 'hasUnreadAnnouncements', 'loadingNotifications'],
/**
* The ponent's data.
*/
data() {
return {
showingNotifications: true,
showingAnnouncements: false
}
},
methods: {
/**
* Show the user notifications.
*/
showNotifications() {
this.showingNotifications = true;
this.showingAnnouncements = false;
},
/**
* Show the product announcements.
*/
showAnnouncements() {
this.showingNotifications = false;
this.showingAnnouncements = true;
this.updateLastReadAnnouncementsTimestamp();
},
/**
* Update the last read announcements timestamp.
*/
updateLastReadAnnouncementsTimestamp() {
this.$http.put('/user/last-read-announcements-at')
.then(() => {
this.$dispatch('updateUser');
});
}
},
puted: {
/**
* Get the active notifications or announcements.
*/
activeNotifications() {
if ( ! this.notifications) {
return [];
}
if (this.showingNotifications) {
return this.notifications.notifications;
} else {
return this.notifications.announcements;
}
},
/**
* Determine if the user has any notifications.
*/
hasNotifications() {
return this.notifications && this.notifications.notifications.length > 0;
},
/**
* Determine if the user has any announcements.
*/
hasAnnouncements() {
return this.notifications && this.notifications.announcements.length > 0;
}
}
};
The beginning of the Laravel blade template:
<spark-notifications
:notifications="notifications"
:has-unread-announcements="hasUnreadAnnouncements"
:loading-notifications="loadingNotifications"
inline-template>
Here is the method in the spark.js
which gets the notifications:
data: {
user: Spark.state.user,
teams: Spark.state.teams,
currentTeam: Spark.state.currentTeam,
loadingNotifications: false,
notifications: null,
supportForm: new SparkForm({
from: '',
subject: '',
message: ''
})
},
getNotifications() {
this.loadingNotifications = true;
this.$http.get('/notifications/recent')
.then(response => {
this.notifications = response.data;
this.loadingNotifications = false;
});
},
And, here is where everything is bootstrapped together app.js
:
require('spark-bootstrap');
require('./ponents/bootstrap');
var app = new Vue({
mixins: [require('spark')]
});
I have a Vue ponent that requires
a file that is a Vue mixin. The file that is required is part of a vendor package so I cannot modify that file. I need to get the notifications
prop from the mixin. The end result is that I am going to access the notifications
object and get the amount of read notifications so that I display this count as a puted property. It seems that using this.notifications
does not work. How can I do this?
Here is my ponent:
var base = require('notifications/notifications');
Vue.ponent('spark-notifications', {
mixins: [base],
});
Here is the notifications
file that was required in the previous ponent:
module.exports = {
props: ['notifications', 'hasUnreadAnnouncements', 'loadingNotifications'],
/**
* The ponent's data.
*/
data() {
return {
showingNotifications: true,
showingAnnouncements: false
}
},
methods: {
/**
* Show the user notifications.
*/
showNotifications() {
this.showingNotifications = true;
this.showingAnnouncements = false;
},
/**
* Show the product announcements.
*/
showAnnouncements() {
this.showingNotifications = false;
this.showingAnnouncements = true;
this.updateLastReadAnnouncementsTimestamp();
},
/**
* Update the last read announcements timestamp.
*/
updateLastReadAnnouncementsTimestamp() {
this.$http.put('/user/last-read-announcements-at')
.then(() => {
this.$dispatch('updateUser');
});
}
},
puted: {
/**
* Get the active notifications or announcements.
*/
activeNotifications() {
if ( ! this.notifications) {
return [];
}
if (this.showingNotifications) {
return this.notifications.notifications;
} else {
return this.notifications.announcements;
}
},
/**
* Determine if the user has any notifications.
*/
hasNotifications() {
return this.notifications && this.notifications.notifications.length > 0;
},
/**
* Determine if the user has any announcements.
*/
hasAnnouncements() {
return this.notifications && this.notifications.announcements.length > 0;
}
}
};
The beginning of the Laravel blade template:
<spark-notifications
:notifications="notifications"
:has-unread-announcements="hasUnreadAnnouncements"
:loading-notifications="loadingNotifications"
inline-template>
Here is the method in the spark.js
which gets the notifications:
data: {
user: Spark.state.user,
teams: Spark.state.teams,
currentTeam: Spark.state.currentTeam,
loadingNotifications: false,
notifications: null,
supportForm: new SparkForm({
from: '',
subject: '',
message: ''
})
},
getNotifications() {
this.loadingNotifications = true;
this.$http.get('/notifications/recent')
.then(response => {
this.notifications = response.data;
this.loadingNotifications = false;
});
},
And, here is where everything is bootstrapped together app.js
:
require('spark-bootstrap');
require('./ponents/bootstrap');
var app = new Vue({
mixins: [require('spark')]
});
Share
Improve this question
edited Apr 21, 2016 at 12:53
dericcain
asked Apr 20, 2016 at 20:24
dericcaindericcain
2,3007 gold badges33 silver badges53 bronze badges
1 Answer
Reset to default 3this.notifications
is the correct way. If that is not defined, it is because no notifications
prop was passed to the ponent.
Edit: The reason it was null
in the ready()
function is that the http request retrieving the notifications hadn't returned yet. OP was trying to get the count of unread notifications, which we got working like so:
Vue.ponent('spark-notifications', {
mixins: [base],
puted: {
notificationCount:function(){
var unread = this.notifications.notifications.filter(function(notif){
return !notif.read;
});
return unread.length
}
}
});
本文标签: javascriptGet data from mixin VuejsStack Overflow
版权声明:本文标题:javascript - Get data from mixin Vue.js - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1744221828a2595901.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论