如何将 ng-repeat 过滤器移动到控制器中并在用户点击时应用“active”class?
How can I move the ng-repeat filter into the controller and apply ‘active’ class when user clicks?
我有一个选项卡式滑块,可以通过选择选项卡切换滑块的视图,该选项卡按 属性 过滤 ng-repeat。
当用户在选项卡之间单击时,如何将过滤器移动到控制器中并应用“活动”class?
html:
<section class="foodTabSlider" data-ng-controller="sliderCtrl">
<ul role="list">
<li ng-click="myFilter = {featured:true}">Featured</li>
<li ng-click="myFilter = {popular:true}">Popular</li>
<li ng-click="myFilter = {special:true}">Special</li>
</ul>
<figure lightslider id="content-slider" class="content-slider">
<figure role="listitem" data-ng-repeat="food in foods | filter:myFilter">
<img src="{{ food.img }}" class="img-responsive">
<figcaption>{{ food.figcaption }}</figcaption>
</figure>
</figure>
</section>
控制器:
'use strict';
angular.module('myApp').controller('sliderCtrl', function sliderCtrl($scope, foodSlider) {
$scope.foods = foodSlider;
};
});
服务片段:
angular.module('myApp').factory('foodSlider', function() {
var factory =
[
{
img: 'images/food-1.png',
figcaption: 'caption 1',
featured: true,
special: true
},
{
img: 'images/food-2.png',
figcaption: 'caption 2',
popular: true,
featured: true
},
{
img: 'images/food-3.png',
figcaption: 'caption 3',
special: true
}
]
return factory;
});
以下是您期待的内容?
<section class="foodTabSlider" data-ng-controller="sliderCtrl">
<ul role="list">
<li ng-click="myFilter = {featured:true}"
ng-class="{'active':myFilter.featured}">Featured</li>
<li ng-click="myFilter = {popular:true}
ng-class="{'active':myFilter.popular}"">Popular</li>
<li ng-click="myFilter = {special:true}"
ng-class="{'active':myFilter.special}">Special</li>
</ul>
<figure lightslider id="content-slider" class="content-slider">
<figure role="listitem" data-ng-repeat="food in foods | filter:myFilter">
<img src="{{ food.img }}" class="img-responsive">
<figcaption>{{ food.figcaption }}</figcaption>
</figure>
</figure>
</section>
编辑
你可以放
$scope.myFilter = {featured:true};
在您的控制器中,让第一个控制器最初处于活动状态。
或者你可以使用 ng-init:
<section class="foodTabSlider" data-ng-controller="sliderCtrl">
<ul role="list" ng-init="myFilter = {featured:true}">
<li ng-click="myFilter = {featured:true}"
ng-class="{'active':myFilter.featured}">Featured</li>
<li ng-click="myFilter = {popular:true}
ng-class="{'active':myFilter.popular}"">Popular</li>
<li ng-click="myFilter = {special:true}"
ng-class="{'active':myFilter.special}">Special</li>
</ul>
<figure lightslider id="content-slider" class="content-slider">
<figure role="listitem" data-ng-repeat="food in foods | filter:myFilter">
<img src="{{ food.img }}" class="img-responsive">
<figcaption>{{ food.figcaption }}</figcaption>
</figure>
</figure>
</section>
我有一个选项卡式滑块,可以通过选择选项卡切换滑块的视图,该选项卡按 属性 过滤 ng-repeat。
当用户在选项卡之间单击时,如何将过滤器移动到控制器中并应用“活动”class?
html:
<section class="foodTabSlider" data-ng-controller="sliderCtrl">
<ul role="list">
<li ng-click="myFilter = {featured:true}">Featured</li>
<li ng-click="myFilter = {popular:true}">Popular</li>
<li ng-click="myFilter = {special:true}">Special</li>
</ul>
<figure lightslider id="content-slider" class="content-slider">
<figure role="listitem" data-ng-repeat="food in foods | filter:myFilter">
<img src="{{ food.img }}" class="img-responsive">
<figcaption>{{ food.figcaption }}</figcaption>
</figure>
</figure>
</section>
控制器:
'use strict';
angular.module('myApp').controller('sliderCtrl', function sliderCtrl($scope, foodSlider) {
$scope.foods = foodSlider;
};
});
服务片段:
angular.module('myApp').factory('foodSlider', function() {
var factory =
[
{
img: 'images/food-1.png',
figcaption: 'caption 1',
featured: true,
special: true
},
{
img: 'images/food-2.png',
figcaption: 'caption 2',
popular: true,
featured: true
},
{
img: 'images/food-3.png',
figcaption: 'caption 3',
special: true
}
]
return factory;
});
以下是您期待的内容?
<section class="foodTabSlider" data-ng-controller="sliderCtrl">
<ul role="list">
<li ng-click="myFilter = {featured:true}"
ng-class="{'active':myFilter.featured}">Featured</li>
<li ng-click="myFilter = {popular:true}
ng-class="{'active':myFilter.popular}"">Popular</li>
<li ng-click="myFilter = {special:true}"
ng-class="{'active':myFilter.special}">Special</li>
</ul>
<figure lightslider id="content-slider" class="content-slider">
<figure role="listitem" data-ng-repeat="food in foods | filter:myFilter">
<img src="{{ food.img }}" class="img-responsive">
<figcaption>{{ food.figcaption }}</figcaption>
</figure>
</figure>
</section>
编辑
你可以放
$scope.myFilter = {featured:true};
在您的控制器中,让第一个控制器最初处于活动状态。
或者你可以使用 ng-init:
<section class="foodTabSlider" data-ng-controller="sliderCtrl">
<ul role="list" ng-init="myFilter = {featured:true}">
<li ng-click="myFilter = {featured:true}"
ng-class="{'active':myFilter.featured}">Featured</li>
<li ng-click="myFilter = {popular:true}
ng-class="{'active':myFilter.popular}"">Popular</li>
<li ng-click="myFilter = {special:true}"
ng-class="{'active':myFilter.special}">Special</li>
</ul>
<figure lightslider id="content-slider" class="content-slider">
<figure role="listitem" data-ng-repeat="food in foods | filter:myFilter">
<img src="{{ food.img }}" class="img-responsive">
<figcaption>{{ food.figcaption }}</figcaption>
</figure>
</figure>
</section>