簡體   English   中英

AngularJS將服務注入指令

[英]Angularjs inject a service into a directive

我需要將服務注入指令。 這是我目前所擁有的。 我將configFactory注入指令

app.directive('googleAnalytics', function(configFactory){ 
  return {
    restrict: 'E',
    replace: true,
    link : function(scope,element,attrs){
      scope.configs = configFactory.getconfigs();
      console.log(scope.configs);
    },
    template: function(elem, attr){
      return "<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');ga('create', '', 'auto');</script>"
    }
  }
})

這是我的console.log的樣子

Promise {$$state: Object}
  $$state:Object
    status:1
    value:Array[1]
      0:Object
        a1:"Survivor"
        a2:"Patient"
        button_name:"DONATE TODAY"
        company_clr_1:"#46b8da"
        ga_id:"UA-XXXXXXXX-1"

我如何獲得ga_id 我需要在此處插入其值: ga('create', 'ga_id', 'auto')

服務如下所示:

app.factory('configFactory', function($rootScope, $log, $q, $http, Data) {
    var configs= {};
        configs.getconfigs=function(){
            var deferred = $q.defer();

            Data.get('config').then(function(data){
                deferred.resolve(data.data);
            });
                return deferred.promise;
        } 
    return configs;
});

configFactory.getconfigs()返回一個promise,因此您應該使用

configFactory.getconfigs().then(function(configs) {
    scope.configs = configs;
});

我也將在同一位置執行GA代碼,而不是使用模板。 我覺得后者不能很好地工作。

傑森 因為您的服務返回deffered.promise,所以您可以使用then函數獲取此值。 這是我的代碼:

app.directive('googleAnalytics', function(configFactory){ 
  return {
    restrict: 'E',
    replace: true,
    link : function(scope,element,attrs){
      configFactory.getconfigs().then(function(configs) {
        scope.configs = configs;
      });
      scope.configs.forEach(function(config){
        console.log(config.ga_id);
      })
    },
    template: function(elem, attr){
      return "<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');ga('create', '', 'auto');</script>"
    }
  }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM