hye*_*luv 6 sdk facebook login vue.js nuxt.js
你可以看到我的代码.
npm install vue init nuxt/koa my-project(koa @ 2)
pages
|- login.vue
<script>
export default {
name: 'login',
method: {
login () {
let vm = this
FB.login(function (response) {
vm.statusChangeCallback(response)
}, {scope: 'publish_actions'})
}
},
mounted () {
console.log('mounted')
let vm = this
window.fbAsyncInit = () => {
FB.init({
appId: 'my-facebook-app-id',
cookie: true,
xfbml: true,
version: 'v2.8'
})
FB.getLoginStatus(function (response) {
vm.statusChangeCallback(response)
})
}
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
但,
sdk.js:96 Uncaught TypeError:vm.statusChangeCallback不是函数
使用Nuxt项目(nuxt/koa)时,使用Facebook SDK的最佳方法是什么?
Cha*_*ang 13
我今天遇到了同样的问题.这是我的nuxt.js解决方案
首先创建一个插件 plugins/fb-sdk.js
const vue_fb = {}
vue_fb.install = function install(Vue, options) {
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0]
if (d.getElementById(id)) {return}
js = d.createElement(s)
js.id = id
js.src = "//connect.facebook.net/en_US/sdk.js"
fjs.parentNode.insertBefore(js, fjs)
console.log('setting fb sdk')
}(document, 'script', 'facebook-jssdk'))
window.fbAsyncInit = function onSDKInit() {
FB.init(options)
FB.AppEvents.logPageView()
Vue.FB = FB
window.dispatchEvent(new Event('fb-sdk-ready'))
}
Vue.FB = undefined
}
import Vue from 'vue'
Vue.use(vue_fb, {
appId: 'your-app-id',
autoLogAppEvents: true,
xfbml: true,
version: 'v2.9'
})
Run Code Online (Sandbox Code Playgroud)
我们可以Vue.FB用来调用FB SDK中的方法并fb-sdk-ready在任何组件中监听事件,如下所示:
export default{
data: function () {
return {isFBReady: false}
},
mounted: function () {
this.isFBReady = Vue.FB != undefined
window.addEventListener('fb-sdk-ready', this.onFBReady)
},
beforeDestroy: function () {
window.removeEventListener('fb-sdk-ready', this.onFBReady)
},
methods: {
onFBReady: function () {
this.isFBReady = true
}
}
}
Run Code Online (Sandbox Code Playgroud)
首先创建一个 javascript 文件并将其包含在您的 static/js 文件夹中:
static/js/fb-sdk.js
Run Code Online (Sandbox Code Playgroud)
在 fb-sdk.js 文件中包含以下脚本:
static/js/fb-sdk.js
Run Code Online (Sandbox Code Playgroud)
最后在你的 nuxt.config.js 中,在 header 部分包含脚本:
window.fbAsyncInit = function () {
FB.init({
appId: '<insert your app id>',
autoLogAppEvents: true,
xfbml: true,
version: 'v2.10'
})
FB.AppEvents.logPageView()
};
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0]
if (d.getElementById(id)) { return }
js = d.createElement(s); js.id = id
js.src = 'https://connect.facebook.net/en_US/sdk.js'
fjs.parentNode.insertBefore(js, fjs)
}(document, 'script', 'facebook-jssdk'))Run Code Online (Sandbox Code Playgroud)
您现在window.FB可以在组件中执行 FB SDK 中可用的方法。
小智 5
我使用 [combined injection][1] 在上下文中插入插件(从而使其在商店中可访问):
在plugins/fb-sdk.js:
const vue_fb = {}
vue_fb.install = function install(Vue, options) {
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0]
if (d.getElementById(id)) {return}
js = d.createElement(s)
js.id = id
js.src = "//connect.facebook.net/en_US/sdk.js"
fjs.parentNode.insertBefore(js, fjs)
console.log('setting fb sdk')
}(document, 'script', 'facebook-jssdk'))
window.fbAsyncInit = function onSDKInit() {
FB.init(options)
FB.AppEvents.logPageView()
Vue.FB = FB
window.dispatchEvent(new Event('fb-sdk-ready'))
vue_fb.sdk = FB // do not forget this line
}
Vue.FB = undefined
}
import Vue from 'vue'
Vue.use(vue_fb, {
appId: 'your-app-id',
autoLogAppEvents: true,
xfbml: true,
version: 'v2.9'
})
// and this line
export default ({ app }, inject) => {
inject('fb', vue_fb)
}
Run Code Online (Sandbox Code Playgroud)
通过this.$fb
[1]访问:https : //nuxtjs.org/guide/plugins/
| 归档时间: |
|
| 查看次数: |
7802 次 |
| 最近记录: |