通过模块传递角度服务

问题描述 投票:0回答:1

我正在查看 HotTowel-Angular 的代码,我正在尝试使用它制作一个小示例,但我无法让它工作。

这是我的代码:

var app = angular.module('myApp', ['common']);

var common = angular.module('common', []);

common.factory('commonf', ['$rootScope', '$timeout', commonFactory]);



function commonFactory($rootScope, $timeout){

    var service = {
    $rootScope: $rootScope,
    $timeout: $timeout
    }

    return service;

}

app.controller('TestCtrl', ['commonf', testctrl]);

function testctrl(commonf) {

   activate(); 

   var $timeout = commonf.$timeout;

   function activate() {

     $timeout(function () {
     alert("test");
     }, 5);

   }

}

这个想法是将整个应用程序中使用的所有常见角度服务保留在一个服务中,该服务被注入到所有服务/控制器中。

当我尝试执行上述操作时,出现以下错误:

“$timeout 不是一个函数”;

编辑:笨蛋

angularjs angularjs-module
1个回答
1
投票

在从 commonf 中提取依赖项之前,您正在调用 activate() 。改成这样:

function testctrl(commonf) {
  // define this first so that $timeout is defined when activate is executed
  var $timeout = commonf.$timeout;

  activate(); 

  function activate() {
    $timeout(function () {
      alert("test");
    }, 5);
}

在 javascript 中,将变量声明作为函数中的第一个语句通常是一种很好的做法。

© www.soinside.com 2019 - 2024. All rights reserved.