Javascript 指令属性中的花括号,angularJS

Javascript 指令属性中的花括号,angularJS,javascript,angularjs,Javascript,Angularjs,我有一个指令,它使用id参数来获取控制器作用域中的数组,如果id是静态值,它可以正常工作,但是如果我使用大括号(例如,我使用ng repeat重复该指令,因此每个id都必须是唯一的,尽管如果我使用id以外的另一个属性,它仍然不起作用),然后它就不起作用了,大括号没有被计算,在web检查器中查看源代码,它实际上是id={{index}而不是id=1 编辑: 我要做的是,当html中有一个stack元素时,它会在当前范围(不是指令的范围)中创建一个与id同名的变量 app.directive('st

我有一个指令,它使用
id
参数来获取控制器作用域中的数组,如果id是静态值,它可以正常工作,但是如果我使用大括号(例如,我使用ng repeat重复该指令,因此每个id都必须是唯一的,尽管如果我使用id以外的另一个属性,它仍然不起作用),然后它就不起作用了,大括号没有被计算,在web检查器中查看源代码,它实际上是
id={{index}
而不是
id=1

编辑: 我要做的是,当html中有一个stack元素时,它会在当前范围(不是指令的范围)中创建一个与id同名的变量

app.directive('stack', function() {
    return {
        restrict: 'E',
        templateUrl: 'stack.html',
        scope: {
            cards: '=id',
            name: '@id',
            countOnly: '@'
        },
        link: function(scope) {
            scope.cards = [];
            //because of cards: '=id', scope.cards is bound to the parentscope.<value of id attr>, so setting scope.cards to [], also creates the variable in the parent scope.
        }
    };
});
(如果我要在牌组数组中添加一张牌,那么两个零都会变为一)


上述方法有效,因为它不使用ng repeat,所以属性是硬编码的。下面的属性需要是动态的,这不起作用,因为没有计算花括号

但是,如果我想使用ng repeat拥有多个甲板,则它不起作用:

<stack ng-repeat="index in range(5)" id="slot{{index}}"></stack>

然后id保持字面上的“slot{{index}}”,而不是“slot0”,等等

我可以做到:

<stack id="slot0"></stack>
<stack id="slot1"></stack>
<stack id="slot2"></stack>
<stack id="slot3"></stack>
<stack id="slot4"></stack>

而且它会像我预期的那样工作


这几乎就像我需要
卡:'=id',
成为
卡:'=$parse(id)
,(或者可能仅在包含大括号时解析)

在ng重复使用:

<stack id="index"></stack>

您不需要插值,而是需要对该值的引用

在指令中,然后使用数据绑定(注意,可以使用=或@)将索引绑定到cards变量。现在链接函数中有了实际的索引值,可以通过卡片访问

这里是一个包含您的确切问题的代码片段。

请参见此处

  • 用于单向装订的花括号
  • 双向绑定没有大括号
HTML:


指令:

app.directive('stack', function () {
    return {
        restrict: 'AE',
        template: '<h2>cards id: {{cards.id}} </h2><p>name:{{name}}</p>',
        scope: {
            cards: '=item',
            name: '@name',
            countOnly: '@'
        }
    };
});
app.directive('stack',function(){
返回{
限制:“AE”,
模板:“卡片id:{{cards.id}}name:{{{name}}

”, 范围:{ 卡片:'=项目', 名称:“@name”, countOnly:“@” } }; });
问题是我需要一种双重参照。在我的主控制器中,我有
$scope.slot1=[…一些卡…]
所以要在不使用ng repeat的情况下引用它,我只需执行:
,但是在ng repeat中,范围函数返回
[“slot1”,“slot2”,…]
,然后使用
卡将设置为
“slot1”
,当我真的希望它被设置为控制器作用域中名为slot1的变量引用的数组时。您在一条注释中提到,
range函数返回[“slot1”、“slot2”、…]
,但在上面的语句中提到它返回一系列数字?那是哪一个呢?它是数字,但在我的评论中我说了“假设范围函数返回…”,因为在该评论中它更方便。嗯,让我说清楚,您想要
scope.cards
作为
range()返回数组的引用
函数,而您希望
scope.name
成为该数组的项吗?您可以同时发布控制器代码吗,您从哪里获得的“名为deck的堆栈包含0张卡”{{name}}=“deck”?名称是从id中获得的,通过指令中scope对象的行获得的
<stack id="slot0"></stack>
<stack id="slot1"></stack>
<stack id="slot2"></stack>
<stack id="slot3"></stack>
<stack id="slot4"></stack>
<stack id="index"></stack>
<div ng-app="app">
    <div ng-controller="firstCtrl">
        <stack ng-repeat="card in range" item="card" name="{{card.name}}"></stack>
    </div>
</div>
app.directive('stack', function () {
    return {
        restrict: 'AE',
        template: '<h2>cards id: {{cards.id}} </h2><p>name:{{name}}</p>',
        scope: {
            cards: '=item',
            name: '@name',
            countOnly: '@'
        }
    };
});