【问题标题】:Can't access to injected AngularJS services within a function in a controller无法在控制器的函数中访问注入的 AngularJS 服务
【发布时间】:2012-09-25 02:42:33
【问题描述】:

在destroy 函数中无法访问$scope 和Food。

foodProject.controller('FoodsCtrl', function($scope, Food) {

    $scope.foods = Food.index();
    $scope.destroy = function(food){
        debugger;
        console.log(Food, $scope);
        food.$destroy();
    };
});

局部范围变量只有

食物:资源

这个:$get.e.$new.a

我找不到 $scope 和食物

http://jsfiddle.net/fW2EA/1/ http://jsfiddle.net/wizztjh/fW2EA/3/

【问题讨论】:

    标签: javascript javascript-framework angularjs


    【解决方案1】:

    在你的销毁函数中包含这一行(你的小提琴中缺少它):

    console.log(Food, $scope);
    

    然后在您的调试器中,检查范围变量的闭包部分(我使用的是 Chrome),当您在断点处停止时。 Food$scope 在那里(正如人们所期望的那样!)。

    this 在destroy 函数的上下文中是ng-repeat 中的一个新作用域,因此与$scope 不同,尽管两者都是作用域。

    【讨论】:

    • 我发现如果添加了 console.log(Food, $scope);如果我不使用食物,我可以使用食物。在调试器中,我无法访问餐饮服务。 Angular 太神奇了......
    【解决方案2】:

    在您的函数中,this 是范围,例如this.foods.

    我相信如果您希望 Food 可访问,请将其添加到范围内,即 $scope.Food = Food;

    我还是个菜鸟,不确定将Food 添加到$scope 是否正确。

    【讨论】:

    • 不知何故,角度会知道您是否使用食品服务。如果你不使用它,它不会初始化它..... omg ...
    • 如果您对依赖注入感到困惑(实际上,它确实看起来很神奇:-]),请阅读:docs.angularjs.org/guide/di
    • @wizztjh OMG,我喜欢 WTF?为什么当我停止使用调试器时不会出现注入的依赖项? ...谢谢!
    猜你喜欢
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多