指令中的数据未在ng重复中显示
Data from directive not displaying within ng-repeat
我已经将这个问题分解为最简单的形式。基本上,我有一个指令,对于演示来说,它还没有真正做任何事情。我有一个div,该指令是一个属性。div中来自对象数组的值不会显示。如果我从div中删除指令,它们就会显示为OK。我显然在这里缺少了一些非常明显的东西,因为我以前做过,没有遇到任何问题。
这是Plunk:http://plnkr.co/edit/ZUXD4qW5hXvB7y9RG6sB?p=preview
脚本:
app.controller('MainCtrl', function($scope) {
$scope.tooltips = [{"id":1,"warn":true},{"id":2,"warn":false},{"id":3,"warn":true},{"id":4,"warn":true}];
});
app.directive("cmTooltip", function () {
return {
scope: {
cmTooltip: "="
}
};
});
HTML
<div ng-repeat="tip in tooltips" class="titlecell" cm-tooltip="true">
A div element: {{ tip.id }}
</div>
<br><br>
Just to prove it works without the directive:
<div ng-repeat="tip in tooltips" class="titlecell">
A div element: {{ tip.id }}
</div>
有一个破解,通过使用transclusion
使其在早期版本的angular中工作,如下所示:
app.directive("cmTooltip", function () {
return {
scope: {
cmTooltip: "="
},
transclude: true,
template : '<div ng-transclude></div>'
};
});
PLNKR
根据Beyers在上面和下面的评论,问题所涉及的行为在至少1.2.5中不再存在
更清楚地说;这与无关,您可以删除它,但仍然不会有tip
(或tooltips
)。
请参阅以下问题,了解=
和其他配置的含义以及它对您的作用。
基本上,对于您的情况,当您使用=
时,指令的作用域将在底层元素中使用,您不再拥有控制器的作用域。这对你来说意味着没有{{ tip.id }}
,甚至没有tip
。因为指令没有提供。
这里有一个演示你可以用它做什么的plunker。
基本上我所做的就是
app.directive("cmTooltip", function () {
return {
scope: {
cmTooltip: "="
},
link: function($scope){ // <<
$scope.tip = { id: 1 }; // <<
} // <<
};
});
这在作用域上创建了tip对象,因此它有一个id。
对于你的情况,你可能只是不使用=
,并根据你想要的内容来考虑这个问题以获得其他选择。
在我看来,这不是一条路。我会使用对象。
JS代码:
function tooltip(id,warn){
this.id = id;
this.warn = warn;
}
tooltip.prototype.toString = function toolToString(){
return "I'm a tooltip, my id = "+this.id+" and my warn value = "+this.warn;
}
$scope.tooltips = [new tooltip(1,true),new tooltip(2,false),new tooltip(3,true),new tooltip(4,true)];
HTML:
<div ng-repeat="tip in tooltips" class="titlecell">
A div element: {{ tip.toString() }}
</div>
相关文章:
- 根据特定条件使用ng显示/ng隐藏来显示/隐藏元素
- 如何在更改时显示ng个重复元素的总和
- Angular js将只显示ng repeat中的第一个元素
- 无法在 ng 重复中显示 ng 模板
- 有角度的ng消息显示ng重复表单上的错误
- ng显示ng隐藏在ng中,重复如何为每个包裹的块单击/触发
- 在调用AJAX之后显示ng控制器的内容;作为“;作用
- AngularJS自定义指令ng显示/ng隐藏
- 只显示ng重复的第一个元素
- Angular JS ng grid:如何取消Edited Row以显示ng grid中的原始值
- Angularjs :如何用 Laravel 显示 ng-repeat 的内容
- AngularJS ng-click不显示ng-show消息
- 以随机顺序显示 ng 重复项目
- Angular JS自定义验证器失败,并显示“ng-invalid-maxlength”
- AngularJs 条件显示 ng-options
- angularjs显示ng重复列表中的最后5项
- 如何在占位符中显示ng cordova相机inkove图像
- 角度模板不显示ng隐藏
- 如何在Angular/Meteor中有条件地显示ng repeat内的按钮
- 在AngularJs中选择性地显示ng重复