用于交换ng-click功能的Angular指令

时间:2015-08-06 21:34:13

标签: angularjs angularjs-directive

我有一个应用程序,其中一个人可以建立“收藏夹”列表。'在特定项目的页面上有一个按钮,您可以单击该按钮将项目添加到收藏夹列表中。

我想要发生的是:点击按钮,项目被添加到收藏夹,现在按钮是不同的颜色,如果您再次点击它,它将从您的收藏夹中删除该项目。

我认为最好建立一个指令来处理这个,但我完全迷失了。

在我的HTML中我有:

<md-button class="md-icon-button" aria-label="Favorite" ng-click="addFavorite(item.id)">
<md-icon md-svg-icon="heart"></md-icon></md-button>

我的addFavorite和deleteFavorite函数正常工作,但我无法弄清楚如何切换发生的事件以及如何在请求触发后更新它。

1 个答案:

答案 0 :(得分:0)

因此,我们可以解决一些不同的问题。

  1. 很可能这将是一个div样式,看起来像一个按钮,以达到你想要的效果。你可以走简单路线并使用http://getbootstrap.com/css/?#buttons或其他东西。样式按钮不会是最好的跨浏览器支持。

  2. 您可以在指令中使用ng-class完成此操作,下面是一些示例代码。假设您正在使用bootstrap。这就变成了你想把它改成什么类的东西。下面我使用了一个图标,但主体是相同的。

  3. 指令

    .directive('toggleClass', function() {
        return {
            restrict: 'A',
            link: function(scope, element, attrs) {
                element.bind('click', function() {
                    if(element.attr("class") == "glyphicon glyphicon-pencil") {
                        element.removeClass("glyphicon glyphicon-pencil");
                        element.addClass(attrs.toggleClass);
                        addFavorite(element.id);
                    } else {
                        element.removeClass("glyphicon glyphicon-ok");
                        element.addClass("glyphicon glyphicon-pencil");
                        removeFavorite(element.id);
                    }
                });
            }
        };
    });
    

    模板

    <i class="glyphicon glyphicon-pencil" toggle-class="glyphicon glyphicon-ok"></i>