在其他范围angularjs中运行范围的函数

时间:2015-06-30 14:33:42

标签: javascript angularjs ionic-framework

如何在另一个控制器的createAdmobBanner函数中运行工作代码?

angular.module('starter', ['ionic', 'starter.controllers'])

.run(function ($ionicPlatform) {
    $ionicPlatform.ready(function () {

        var admobid = {};
        if (/(android)/i.test(navigator.userAgent)) {
            admobid = {
                banner: 'ca-app-pub-3815248714018431/123456789'
            };
        }

        function createAdmobBanner() {
            AdMob.createBanner({
                adId: admobid.banner
                adSize: 'SMART_BANNER',
                position: 8
            });
        }

        createAdmobBanner();

    });
})

如果我只在控制器中执行createAdmobBanner,则createAdmobBanner()未定义。我试过了$rootScope,但插件看起来不适用。

3 个答案:

答案 0 :(得分:1)

您需要将其添加到a service或附加在$rootScope

$ rootScope解决方案 - 实施起来更快,但“脏”

.run(function($ionicPlatform,$rootScope) { //add $rootScope dependency injection
$rootScope.createAdmobBanner = function(){
  AdMob.createBanner( { adId:admobid.banner
  adSize: 'SMART_BANNER',
  position:8 

  });
}
$rootScope.createAdmobBanner()

进入您的控制器,添加依赖项$rootScope并调用您的函数$rootScope.createAdmobBanner

服务解决方案 - 清洁&可重复使用的

  1. 创建具有您功能的新服务
  2. 将您的服务注入运行
  3. 将您的服务功能调用为
  4. 将您的服务注入控制器
  5. 将您的服务功能称为控制器

答案 1 :(得分:0)

尝试定义外部角度服务/工厂,并使用依赖注入为您需要的任何控制器提供此服务。 这是以这种方式共享通用逻辑或数据的好习惯。

修改

angular.module('starter', ['ionic', 'starter.controllers']);

angular.module('starter').factory('bannerFactory',function(){
    return {
        createAdmobBanner: function(){
            window.plugins.AdMob.createBanner({ adId:admobid.banner
                                  adSize: 'SMART_BANNER',
                                  position:8 
                                });
        }
    }
});

angular.module('starter').controller('anyController',['bannerFactory', function(bannerFactory){
    bannerFactory.createAdmobBanner();
}]);

angular.module('starter').run(function ($ionicPlatform,bannerFactory) {
    $ionicPlatform.ready(function () {

        bannerFactory.createAdmobBanner();

    });
});

答案 2 :(得分:0)

我刚发现此链接here。试试看。重要的代码如下所示:

$ionicPlatform.ready(function() {

admob内容在var admob = window.plugins.AdMob;范围内,定义如下 /*not shown: char north[] = "NORTH";*/

这有帮助吗?