2015-06-28 34 views
2

我目前正在從一個WordPress網站,它看起來像這樣加載JSON數據刪除鏈接標籤:如何從JSON數據使用AngularJS

"content": "<p>This is text which <a href="#">may have</a> some random links <a href="#">in</a> it.</p>", 

控制器

$http.get($scope.postUrl + $stateParams.postID + '?type[]=post') 
    .success(function(data){ 
     $scope.post = data; 
    }) 
    .error(function() { 
     $scope.loading = false; 
     $scope.errorMessage = "Item could not be found."; 
    }) 
    .then(function() { 
     $scope.loading = false; 
    }); 

HTML

<div ng-bind-html="post.content" class="post-content"></div> 

我想刪除可能位於原始「內容」中的任何鏈接,最好使用過濾器。有沒有其他人有類似的情況,並提出一個解決方案?

我妄圖用jQuery選擇針對他們:

$(document).ready(function() { $(".post-content a").contents().unwrap(); }); 

或在控制器級別:

$scope.$on('$viewContentLoaded', function() { $(".post-content a").contents().unwrap(); });

想必這些沒有工作,由於不是內容的時序問題加載。

回答

2

這兩種嘗試都很接近,但只是缺少你想要的。

首先,Angular的element接口沒有unwrap方法。忽略,如果你使用的jQuery,你可能是。如果你不是,你想在Angular之前將jQuery作爲一個依賴關係。

其次,您可以在控制器中完成整個操作。剪斷:

$http.get($scope.postUrl + $stateParams.postID + '?type[]=post') 
.success(function(data){ 
    var postContent = angular.element(data.content); // This wraps the HTML in jQuery 
    postContent.find("a").contents().unwrap(); // Remove a tags 
    $scope.post = $('<div>').append(postContent).html(); // Cast to HTML String 
}) 
+0

使用你的代碼現在已經成功地消除了鏈接,但在視圖'

'返回的翻譯:這對檢查的HTML內容即'[P,文本,對文本的部分,p,text,p]',有沒有辦法將它壓平成一個字符串輸出? –

+0

正確...您將Angular元素轉換爲字符串,這是一個問題。您需要取出HTML字符串。我編輯了答案。 –

+0

完美 - 完成了這個訣竅。我將.unwrap()更改爲.contents()。unwrap(),因爲它之前刪除了整個包含段落。 –