这很可能是另一个Angular范围问题。我很努力地找到SO的解决方案,然而,我找到的任何东西都无法解决我的问题。
我将Angular.js与Swiper.js一起使用。在外部垂直滑块的一个滑块内,我有一个内部水平滑块,仅显示(ng-if
)用户选择音频(不是视频);然后,用户可以在多个图像(ng-repeat
)之间滑动。这些图片有我想点击的标题(ng-click
),因此可以隐藏/显示(ng-show
)。
除了点击后隐藏和显示外,一切正常。我尝试在几个代码级别(div)之间分发ng-directives,并尝试使用或不调用我的控制器函数。
这是我的代码:
<div ng-if="selectedMedium().class === 'Audio'" class="swiper-container swiper-container-images">
<div class="swiper-wrapper">
<div ng-repeat="image in selectedImages track by $index" end-repeat class="swiper-slide images">
<img class="image" ng-src="{{ image }}">
<a class="caption" href="#" ng-init="show = true" ng-show="show" ng-click="show = !show">{{ selectedCaptions[$index] }}</a>
</div>
</div>
<div class="swiper-pagination"></div>
</div>
为了完整起见,我包括$ scope.selectedMedium函数(在控制器中)和end-repeat指令(在控制器外部与Angular和Swiper结合):
$scope.selectedMedium = function() {
for (var i = 0; i < $scope.media.length; i++) {
if ($scope.media[i].person === $scope.selectedPerson.person && $scope.media[i].topic === $scope.selectedTopic.topic) {
$scope.selectedImages = ("imageFiles" in $scope.media[i]) ? $scope.media[i].imageFiles : null;
$scope.selectedCaptions = ("imageSubtitles" in $scope.media[i]) ? $scope.media[i].imageSubtitles : null;
return $scope.media[i];
}
}
return "Error";
};
myApp.directive('endRepeat', ['$timeout', function($timeout) {
return {
restrict: 'A',
link: function(scope, element, attr) {
if (scope.$last === true) {
$timeout(function() {
scope.$emit('ngRepeatFinished');
});
}
}
}
}]);
在上面的代码中,我试图在没有任何引用控制器中的函数的情况下进行操作,但在其他版本中,我尝试通过放置类似的东西从(多个,我猜)childscope(s)重新连接到$ scope: / p>
<a class="caption" href="#" ng-show="$parent.isCaptionShowing[$index]" ng-click="$parent.isCaptionShowing[$index] = !$parent.isCaptionShowing[$index]">{{ selectedCaptions[$index] }}</a>
我甚至试过$parent.$parent.isCaptionShowing[$index]
。对于这种方法,我在$ scope.selectedMedium函数中添加了以下行:
$scope.isCaptionShowing = ($scope.selectedCaptions !== null) ? new Array($scope.selectedCaptions.length).fill(true) : null;
这两种方法(所有HTML代码内部与对控制器功能的调用都没有)起作用。我似乎ng-click功能没有按预期工作。任何想法可能是什么问题?