Одностраничное приложение с кнопкой angularjs и facebook share
Я следую за этим сообщением, чтобы развернуть facebook share botton в моем приложении
http://www.hyperarts.com/blog/tutorial-how-to-add-facebook-share-button-to-your-web-site-pages/
Первая проблема заключается в том, что я не могу передать post.id
, post.caption
в facebook script.
Вторая - это ссылка на каждое сообщение на стене facebook link: ' link to every {{post.id}}'
. Если люди нажимают на ссылку, разделяемую на их стене, она должна jum (AUTO SCROLL) для определенной записи на моем сайте, это одна страница, поэтому все сообщения имеют одну и ту же ссылку
Большое спасибо!
Это мой контроллер Angularjs:
function MyController($scope) {
$scope.posts = [{"title": "AAtitle",
"content":"AAcontent",
"caption":"AAcaption",
"id":"adfddsf"dfsdfdsds
},
{"title": "BBtitle",
"content":"BBcontent",
"caption":"BBcaption",
"id":"dfgfddrggdgdgdgfd"
},
{"title": "CCtitle",
"content":"CCcontent",
"caption":"CCcaption",
"id":"dhgfetyhnncvcbcqqq"
}
]
}
Это SDK в facebook:
<div id="fb-root"></div>
window.fbAsyncInit = function() {
FB.init({appId: 'MY APP ID', status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
Это мой html
<div ng-controller = "MyController">
<ul>
<li ng-repeat = "post in posts">
<div> {{post.title}} </div>
<div> {{post.content}} </div>
<div> <script type="text/javascript">
$(document).ready(function(){
$('#{{post.id}}').click(function(e){ //unrecognized expression: {{post.id}}
e.preventDefault();
FB.ui(
{
method: 'feed',
name: 'This is the content of the "name" field.',
link: ' link to every {{post.id}}',
caption: '{{post.caption'}},
});
});
});
</script>
<div id = "{{post.id}}">share </div>
</div>
</li>
</ul>
</div>
Ответы
Ответ 1
Я думаю, вы могли бы зарегистрировать обработчик событий щелчка с помощью кнопки "Angular". Переместите логику в контроллер и используйте директиву ng-click для запуска действия с общим доступом.
Моя реализация
HTML
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: 'YOUR APP ID', status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
<div ng-controller="fbCtrl">
<div ng-repeat="post in posts">
<div>{{post.title}}</div>
<div>{{post.content}}</div>
<button ng-click="share(post)">SHARE</button>
</div>
</div>
</body>
контроллер
angular.module("myApp",[])
.controller("fbCtrl",function($scope){
$scope.posts = [{id:1,title:"title1",content:"content1",caption:"caption1"},{id:2,title:"title2",content:"content2",caption:"caption2"}];
$scope.share = function(post){
FB.ui(
{
method: 'feed',
name: 'This is the content of the "name" field.',
link: 'http://www.hyperarts.com/external-xfbml/'+post.id,
picture: 'http://www.hyperarts.com/external-xfbml/share-image.gif',
caption: post.caption,
description: 'This is the content of the "description" field, below the caption.',
message: ''
});
}
});
Снимок экрана
![enter image description here]()
Вы можете создать службу обмена FACEBOOK, если эта функция будет применяться к нескольким частям.
Надеюсь, что это будет полезно.
Ответ 2
Здесь также директива, построенная на основе ответа Chickenrice.
Html:
<body>
<div id="fb-root"></div>
<script>
window.fbAsyncInit = function() {
FB.init({appId: 'YOUR APP ID', status: true, cookie: true,
xfbml: true});
};
(function() {
var e = document.createElement('script'); e.async = true;
e.src = document.location.protocol +
'//connect.facebook.net/en_US/all.js';
document.getElementById('fb-root').appendChild(e);
}());
</script>
<button fb-share>
<img src="/assets/images/icons/icon-fb.png">
</button>
</body>
Директива
'use strict';
/* global FB */
myApp.directive('fbShare', [
function() {
return {
restrict: 'A',
link: function(scope, element) {
element.on('click', function() {
FB.ui({
method: 'feed',
name: 'Name you want to show',
link: 'http://link-you-want-to-show',
picture: 'http://picture-you-want-to-show',
caption: 'Caption you want to show',
description: 'Description you want to show',
message: 'Message you want to show'
});
});
}
};
}
]);
Если вы используете jshint (вы должны), там находится часть /* global FB */
, поэтому вы не получите предупреждение переменной undefined.