【问题标题】:Angular factory undefined in controller控制器中未定义的角度工厂
【发布时间】:2014-12-17 02:51:03
【问题描述】:

我正在开发一个非常简单的工厂,用于在角度控制器中使用。问题是工厂似乎没有被控制器内部拾取。 console.log 返回undefined,我似乎不知道为什么。

var app = angular.module('App', ['ngRoute', 'ngTouch']);

app.controller('AppController', [
'$scope',
'$rootScope',
'myFactory',
function($scope, $routeParams, myFactory) {
    console.log(myFactory)
}]);

app.factory('myFactory', function() {
    return 'test';
});

【问题讨论】:

  • 那是准确的代码吗? 'AppController' 后面少了一个逗号。
  • @rayners 抱歉,代码不准确。在实际代码中没有语法错误。真正的代码有很多混乱,但这些是与工厂/控制器通信相关的唯一部分。
  • 这可能与位于 Rails 应用程序之上有关,但依赖注入顺序需要匹配控制器输入参数顺序才能工作。

标签: javascript angularjs controller factory


【解决方案1】:

问题是您的控制器正在注入 $rootScope,然后您将其更改为函数中的 $routeParams。看看这个小提琴http://jsfiddle.net/wkqajL2x/6/ 我已经删除了这两个属性。然后它就可以正常工作了。

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

app.controller('AppController', [
'$scope',
'myFactory',
function($scope, myFactory) {
    console.log(myFactory)
}]);

app.factory('myFactory', function() {
    return 'test';
});

所以你只需要决定你真正想要使用哪一个。

【讨论】:

  • 当你注解你的注射剂时,控制器中变量的名称不再重要,所以在这种情况下,他的$routeParam变量(虽然,显然是一个错误)将是$rootScope .也就是说,事实上,注释的全部意义,这样在代码最小化期间​​,以下内容将起作用:.controller("ctrl", ["$scope", "$rootScope", function(a, b){..}])
  • 这实际上对我有用!我真的不认为它会依赖于订单,但这绝对是问题,因为切换订单会导致它再次未定义。谢谢@Leo Farmer
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
相关资源
最近更新 更多