我在div列表上使用ng-repeat,并且手动在渲染此div的json中添加项目。我需要放置我在json中添加的最后一个div,它会自动在屏幕上重绘,光标所在的位置,其余的都保持在相同的位置,但是没有在渲染它的json中给出位置。
我的方法是这样的
<div ng-repeat="contact in jsonContacts" style="left: {{lastX}}px; top: {{lastY}}px;"></div>
但是,当我这样做时,所有的div都得到了这个位置,因此我需要使用$ last变量来创建条件,以使用左侧和顶部的CSS添加或删除样式标签。
提前谢谢你,丹尼尔!
查看这fiddle两种方法的示例(在jsfiddle中使用颜色作为位置更加困难)
选项1:ng样式和范围函数
ng-style将使您能够做到这一点,并且要使其保持整洁和可测试,您应该定义一个范围函数,如下所示(对于稳定的1.0.x版本的angular,尽管不支持1.1.5版本,但目前尚不支持在角度表达式中使用三元运算符。三元支持)。
ng-style='myStyleFunction($last)'
在控制器中,定义:
$scope.myStyleFunction = function($last) {
return {
'left': $last ? $scope.lastX + 'px' : '',
'top': $last ? $scope.lastY + 'px' : ''
};
}
选项2:自定义指令
或者,您可以考虑更多“角度”并定义一个指令:
dirModule.directive('positionLast', function() {
return {
scope: true,
link: function (scope, $element, attrs) {
if (scope.$last) {
// if jQuery is present use this, else adjust as appropriate
$element.css("left", $scope.lastX + 'px');
$element.css("top", $scope.lastY + 'px');
}
}
}
});
接着:
<div ng-repeat="contact in jsonContacts" position-last> ...
编辑这通过使用scope: true
并在ng-repeat
元素上声明指令来起作用。由于仅为一个元素上的所有指令创建一个新作用域(假设至少有一个请求一个新作用域),因此它可以访问ng-repeat
作用域值。有关相关文档,请参见:
scope-如果设置为true,则将为此指令创建一个新的范围。如果同一元素上的多个指令要求一个新的作用域,则仅创建一个新的作用域。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句