AngularJS只在ng-repeat中显示last Element
AngularJS only shows last Element in ng-repeat
我有一个奇怪的行为使用flexslider渲染一堆画廊。如下所示,我得到了一个由几个对象组成的数组,这些对象构成了一个图像数组。当我"渲染"这些图库时,所有的图库都出现了,但只有最后一个图库显示了它的图像。在所有图库中,显示特定图片数量的指示器,以及标题和链接,都是正确的,但是缺少图片。
我做错了什么吗?下面是我的代码:
$scope.galleries = [{title: 'gallery1', 'link': 'http://...', elements:
['img/img1.jpg','img/img2.jpg']},
{title: 'gallery2', 'link': 'http://...', elements:
['img/img3.jpg','img/img4.jpg']}];
我想用指令和ng-repeat显示每个图库。该指令应该显示标题并使用flexslider(https://github.com/thenikso/angular-flexslider)渲染图库。指令:
.directive('gallery', function() {
return {
restrict: 'A',
templateUrl: 'views/gallery.html',
scope: {
gallery: '='
},
link: function(scope, element, attrs) {
// first generate html, the
// set content here
scope.link = scope.gallery.link;
scope.title = scope.gallery.title;
scope.elements = angular.copy(scope.gallery.elements);
scope.num = scope.gallery.elements.length;
}
};
}
模板:
<a ng-href="{{link}}" target="_blank" ng-bind="title"></a>
<div class="gallery">
<div class="flexslider">
<div class="slides-control">
<a href="" ng-click="prevSlideshow()" class="prev">
<
</a>
<span class="current_pos">1</span>
/
<span ng-bind="num" class="total"></span>
<a href="" ng-click="nextSlideshow()" class="next">
>
</a>
</div>
<ul ng-click="nextSlideshow()" class="slides" slideshow="false" control-nav="false" direction-nav="false" flex-slider slide="element in elements">
<li><img ng-src="{{element}}" alt=""></li>
</ul>
</div>
<a ng-href="{{link}}" target="_blank"><h4>more</h4></a>
<h5>---------------------------------------</h5>
</div>
最后我怎么称呼它:
<ul class="publications" >
<li ng-repeat="gallery in galleries">
<div gallery="gallery"></div>
</li>
</ul>
我有一些好消息和一些坏消息…
好消息你的代码没有做错什么
坏消息你的代码没有做错什么
你试图使用FlexSlider
的指令有一些限制,如目前所写的。您只看到一组数据呈现的原因是因为slide属性和指令内所有其他逻辑的关联被写入compile
(参见flex-slider.js中的第11行)函数时,与指令的scope
相关的任何内容都应该在link
函数中执行。
- 联系指令的开发者并提交bug报告
- 在指令 中自行解决问题
- 编写自己的组件
这是我创建的plnkr 这个plnkr显示了一个ng-repeat,我添加它是为了说明你的代码应该根据指令的创建方式工作。
注意开发人员可能从未遇到过这种情况,因为创建它的意图可能是一次只有一个实例。
感谢大家提出这个问题并分析它!这确实是angular-flexslider
的指令问题。在http://github.com/thenikso/angular-flexslider/issues/20
从AngularJs开始的用户的一般信息:
有时你使用ng-repeat
下拉菜单
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Language</a>
<ul class="dropdown-menu" ng-repeat="language in languages">
<li>
<a href="#">{{ language.name | translate }}</a>
</li>
</ul>
别忘了ng-repeat也会重复ul。输出为:
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Language</a>
<ul class="dropdown-menu ng-scope" role="menu" ng-repeat="language in languages">
<li><a href="#" ng-click="changeLanguage(language.abv)" class="ng-binding">French</a></li>
</ul>
<ul class="dropdown-menu ng-scope" role="menu" ng-repeat="language in languages">
<li><a href="#" ng-click="changeLanguage(language.abv)" class="ng-binding">English</a></li>
</ul>
</li>
我们可以看到两个ul
下拉,这是不好的,这就是为什么你只能看到数组的最后一个元素。正确的方法是:
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Language</a>
<ul class="dropdown-menu">
<li ng-repeat="language in languages">
<a href="#">{{ language.name | translate }}</a>
</li>
</ul>
希望有帮助!
- jQuery:.click(function(){(element),collapse('show',f
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- Javascript - element.childNodes does not see an append.newch
- 使用element简化onclick函数
- AngularJS,angular.element($0).scope()揭示了每个控制器的函数
- 如何使用element.myobj.prop等具有对象属性的元素
- element.dataset in Internet Explorer
- Protractor:element.getText()返回一个对象,而不是String
- Last.fm API发送2个曲目时,我要求一个,如果我正在听一首歌
- Regex Replace仅适用于Last Match
- jQuery event.target is_a_child_of(element)
- 如何获得'{element:}'价值
- ng模型在$(element).clone()之后不起作用
- jquery selector on some element
- 哪个更有效-$('selecter').last()或$(')selecter:last'
- 将setTimeout()包装器实现为Element.prototype中的方法
- 选中复选框时,DOM不显示element.input.checked和ng
- 如何在element.someEvent函数中使用更多参数
- Is there a wrapper/grouping element usable in <head>?
- AngularJS只在ng-repeat中显示last Element