single page application with angularjs and facebook share button

前端 未结 2 879
心在旅途
心在旅途 2020-12-12 18:20

I follow this post to deploy facebook share botton in my app http://www.hyperarts.com/blog/tutorial-how-to-add-facebook-share-button-to-your-web-site-pages/

The firs

相关标签:
2条回答
  • 2020-12-12 19:19

    Here's also a directive built based on Chickenrice's answer.

    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>
    

    Directive:

    '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'
                        });
                    });
                }
            };
        }
    ]);
    

    If you use jshint (you should) the /* global FB */ part is there in so you don't get undefined variable warning.

    0 讨论(0)
  • 2020-12-12 19:20

    I think you could register share button click event handler in "Angular way". Move the logic to controller and use ng-click directive to trigger share action.

    My implementation

    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>
    

    Controller

    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: ''
        });
      }
    });
    

    Screenshot

    enter image description here

    You could create a service for FACEBOOK sharing if this function will apply to multiple parts.

    Hope this is helpful.

    0 讨论(0)
提交回复
热议问题