如何通过绑定的控制器变量访问服务的属性

How to access a property of a service via a bound controller variable

本文关键字:访问 服务 属性 变量 控制器 何通过 绑定      更新时间:2023-09-26

我试图通过模板中的绑定控制器变量访问服务的属性,但没有成功。

控制器:

app.controller('VictoryController', function($scope, AlertStatisticsService) {
    $scope.AlertStats = AlertStatisticsService;
});

服务返回一个结构如下的对象:

factory = {
    factionWins = {
        vs: 123,
        nc: 123,
        tr: 123
    }
}

模板作为Attribute指令的一部分呈现:

app.directive('homeVictoryCard', function() {
    return {
        restrict: 'A',
        replace: true,
        scope : {
            empire: '@',
        },
        templateUrl: 'views/home/partials/victory.card.html'
    };
});

它由以下HTML元素调用:

<div home-victory-card empire="vs"></div>

在有问题的模板中,我试图通过empire变量访问控制器/服务的对象数据,该变量在模板的范围内,如下所示:

{{ AlertStats.factionWins[empire] }}

我也尝试在各种ng隐藏和ng显示中使用它,比如:

ng-hide="AlertStats.factionWins[empire] > 0"

在Twig中,我曾经使用attribute(AlertStats.factionWins, empire)来获取信息,但我不知道如何在Angular中做到这一点,谷歌搜索也没有返回任何有用的信息。

提前感谢!

由于您有具有独立作用域的指令,因此它不会从父控制器继承作用域,因此AlertStats不在指令作用域中

您可以将工厂注入指令,或者将另一个范围变量作为属性传递给指令

示例注入工厂

app.directive('homeVictoryCard', function(AlertStatisticsService) {
    return {
        restrict: 'A',
        replace: true,
        scope : {
            empire: '@',
        },
        templateUrl: 'views/home/partials/victory.card.html',
        link:function(scope){
           scope.AlertStats = AlertStatisticsService
        }
    };
});