将单个服务逻辑应用于两个类似的按钮
Apply single service logic to two similar buttons
我的ReverseService
服务中有一个函数。我在controller
中使用此service
。在ng-click
上调用它。问题是,我为两个ng-click
调用了同一个函数,因此在我希望它只应用于一个(我单击的那个)的地方被应用于这两个函数。我知道为什么会发生这种情况,但我无法想出解决方案。这是代码
HTML
<div id="sidebar" ng-controller="SideCtrl">
<!-- here goes a static sidebar -->
<div class="large_3_custom columns">
<ul class="side-nav side_nav_custom">
<li>
<img src="images/dashboard.png" alt="">
<a href="#">DASHBOARD</a>
</li>
<li>
<img ng-src="images/company_profile.png" alt="">
<a href="#">COMPANY PROFILE</a>
<img ng-src="{{images.current}}" ng-click="swapHere();subSec = !subSec" id="arrowRotate">
</li>
<li ng-show="subSec">
<img src="" alt="">
<a href="#">SERVICES</a>
</li>
<li ng-show="subSec">
<img src="" alt="">
<a href="#">EMPLOYEES</a>
</li>
<li>
<img src="images/statistics.png" alt="">
<a href="#">STATISTICS</a>
</li>
<li>
<img src="images/reviews.png" alt="">
<a href="#">REVIEWS</a>
</li>
<li>
<img src="images/tips_advice.png" alt="">
<a href="#">TIPS & ADVICE</a>
</li>
<li>
<img src="images/deals.png" alt="">
<a href="#">DEALS</a>
</li>
<li>
<img src="images/media.png" alt="">
<a href="#">MEDIA</a>
</li>
<li>
<img src="images/price_list.png" alt="">
<a href="#">BOOKING</a>
<img ng-src="{{images.current}}" ng-click="swapHere();bookSec = !bookSec" id="arrowBook">
</li>
<li ng-show="bookSec">
<img src="" alt="">
<a href="#">CALENDAR</a>
</li>
<li>
<img src="images/market.png" alt="">
<a href="#">MARKET</a>
</li>
<li>
<img src="images/sponser_deal.png" alt="">
<a href="#">SPONSOR A DEAL</a>
</li>
<li>
<img src="images/extra_services.png" alt="">
<a href="#">EXTRA SERVICES</a>
</li>
</ul>
</div>
</div>
角度
var myApp = angular.module("myApp", []);
myApp.service("ReverseService", function() {
// service func goes here --
this.imgSwap = function(images) {
if (images.current === images.finalImage) {
images.current = images.initialImage;
} else if (images.current === images.initialImage) {
images.current = images.finalImage;
}
};
});
myApp.controller("SideCtrl", function($scope, ReverseService) {
console.log("thomas");
$scope.myData = {};
$scope.images = {
initialImage: "images/prof_arrow1.png",
finalImage: "images/prof_arrow.png",
current: "images/prof_arrow1.png"
};
$scope.swapHere = function() {
ReverseService.imgSwap($scope.images);
};
$scope.subSec = false;
$scope.bookSec = false;
});
这是一个Plunker。
您应该隔离图像值的范围
我已经更新了plunk:punk
您需要做的是一个具有独立作用域和控制器的指令。(我让您使用css来正确对齐图像):我创建了一个模板(swapimage.html)
<img src="{{displayImage}}" ng-click="imageClicked()">
和指令
myApp.directive("swapArrow", function(ReverseService){
return {
restrict:'A',
scope : {
images :'=',
toggleValue : '='
},
templateUrl:'swapimage.html',
controller:function($scope, ReverseService){
$scope.imageClicked = function(){
ReverseService.imgSwap($scope.images);
$scope.displayImage = $scope.images.current;
$scope.toggleValue = !$scope.toggleValue;
console.log($scope.toggleValue);
};
},
link:function(scope, element){
scope.displayImage = scope.images.current;
}
}
});
但在我看来,与其玩toggleValue,不如transclude内容并玩显示隐藏值
相关文章:
- 两个按钮在初次点击后会触发相同的功能
- 解耦按钮(两个按钮同时切换),并根据数据显示相应的按钮
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- 一个具有两个图像按钮的表单在只能按下一个按钮的情况下发送两个按钮值
- 如何停止两个按钮执行相同的工作?在这种情况下,它们都会滚动到顶部
- 如何将两个按钮组合为一个
- 使用一个输入作为两个按钮的值
- 在两个按钮上的单击事件上,使用 jQuery 获取未按下按钮的值
- 使用两个按钮(提交按钮和普通按钮),它们应该以不同的方式提交相同的表单
- 如何在javascript中使两个按钮显示在一起
- 如何将相同的功能应用于两个按钮
- Jquery验证插件两个按钮
- 单击一个按钮时,如何隐藏两个按钮
- 使用相同形式的两个按钮
- 带有两个按钮的输入字段
- 不能让两个按钮在 jquery 中使用相同的函数与 html
- j查询提交两个按钮
- 仅两个按钮中的一个需要输入
- 如何在同一个表单中有两个按钮来在 ajax 中执行不同的操作
- 如何在jQuery中单击两个按钮之一时执行功能