在Ajax调用之后,AngularJS替换按钮

时间:2015-05-21 23:02:24

标签: javascript ajax angularjs

我有一个"最喜欢/不喜欢的"一旦用户点击它就会切换它的按钮。

<button id="favoriteButton" class="btn btn-default btn-sm" type="button" ng-click="@Model.GetFavoriteClick()">
    <span aria-hidden="true" class="@Model.GetFavoriteClass()"></span> @Model.GetFavoriteText()
</button>     

在我的控制器中我正在处理点击这种方式;

$scope.Favorite = function (providerContentId) {
        var request = $http({
            method: "post",
            url: "/api/Favorite",
            params: {
                // query string params
            },
            data: {
                providerContentId: providerContentId
            }
        });
        request.then(function (response) {
            // here is it replacing but new ng-click is not working
             var element = angular.element(document.querySelector('#favoriteButton'));
                element.replaceWith(response.data);
        }, function (response) {
            alert(response.data);
        });
    };

在我搜索时,我发现我会使用$ compile服务来做到这一点,但我做不到 让它发挥作用。

 var content = $(response.data);
                angular.element(document).injector().invoke(function ($compile) {
                    var scope = angular.element(content).scope();
                    $compile(content)(scope);

我该怎么做?

2 个答案:

答案 0 :(得分:0)

你可以尝试

element[0].outerHTML = response.data; 

而不是

element.replaceWith(response.data);

答案 1 :(得分:0)

你应该使用ng-class

例如:

  <button ng-class="{'btn-favorite': isFav,'btn-unfavorite': !isFav}" ng-click="Favorite();" id="favoriteButton" class="btn btn-default btn-sm" type="button">
   <span aria-hidden="true" class="@Model.GetFavoriteClass()"></span>
 </button>

并添加你的函数Favorite():

$scope.isFav = ! $scope.isFav;