2017-09-02 108 views
2

是否可以從app.run的子控制器調用函數?app.run中的訪問控制器功能

我的子應用程序的Facebook控制器:

function faceBookController ($scope, $rootScope, faceBookService) { 

    // I want to call this #scope.init in app.run 

    $scope.init = function() { 
     checkLoginState(); 
    }; 

    function checkLoginState() { 
     faceBookService.init(); 
    } 
} 

angular.module('app.facebook').controller('faceBookController', ['$scope', '$rootScope', 'faceBookService', faceBookController]); 

app.run:

function runFunction (User, $rootScope) { 

***** 

$window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '************', 
     version : 'v2.5' // use graph api version 2.5 
    }); 

    //Here after facebook sdk connected execute init fruntion from faceBookController. 

    $rootScope.init(); 
} 

angular.module('app.run', []).run(['User', '$rootScope', runFunction]); 

和主要app.js文件:

angular.module('app', ['ngRoute', 'app.run', 'app.facebook']); 

回答

2

你內運行,你可以調用控制器功能如下 您可以給控制器所屬範圍的div編號,

<div id="yourcontainer" ng-app="test" ng-controller="faceBookController"> 
</div> 

然後,

function runFunction (User, $rootScope) { 
$window.fbAsyncInit = function() { 
    FB.init({ 
     appId  : '************', 
     version : 'v2.5' // use graph api version 2.5 
    }); 
    var scope = ngular.element(document.getElementById('yourcontainer')).scope(); 
    scope.init(); 
} 
+0

感謝您的回答,但你認爲它正確的做法?或者還有其他方法可以達到同樣的效果嗎?我的意思是,如果你是我,並且是解決方案的最佳方法,那麼也會這樣做? – developer

+0

@developer這是訪問控制器功能的方式,因爲我不知道你在做什麼,我可以對最好的方法發表評論 – Sajeetharan

+0

我正在認證用戶低谷臉譜,所以我有一個名爲'faceBookService'的服務它包含了所有的業務邏輯 - 就像首先檢查用戶是否登錄一樣,然後向facebook api運行所需的請求。還有一個名爲'faceBookController'的控制器,它是'init'的那個服務。但是,在app.run之前,我已經將連接到Facebook的代碼發出請求。所以控制器應該在app.run運行之後調用服務的方法 - 在與facebook建立連接之後。 – developer