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变量。现在链接函数中有了实际的索引值,可以通过卡片访问
这里是一个包含您的确切问题的代码片段。请参见此处
- 用于单向装订的花括号
- 双向绑定没有大括号
指令:
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: '@'
}
};
});