簡體   English   中英

Angular JS ng-repeat和“ this”

[英]Angular JS ng-repeat and the 'this'

我是AngularJS的新手,但之前做了一些jQuery。 我在理解如何獲取被點擊元素上有一個問題/它是父級來進行一些更改,例如更改我點擊的項目中的文本,圖標或類。

簡單的HTML:

<ul ng-controller="basketCtrl">
    <li ng-repeat="item in item">
        <button ng-click="addToBasket(Itemid,this,whatever)">
             <i class="myBasketicon">
             <span>Buy now</span>
        </button>
    </li>
</ul>

我想做的事:

$scope.addTobasket = function (id, elem, whatever){
   // to some JSON-Server-stuff - that works perfect

   // now my problems, : 

   //change this -> myBasketIcon -> myOKicon
   //change this -> span text  Buy now-> Thanks for buying
   // give the this -> li an class => 'changed'

}

我真的做了很多嘗試,例如在標簽,數組中使用ng-model ...半天在網上搜索...但沒有找到與我的問題相符的內容。 也許這只是思考的方式而不是棱角分明的方式...所以請幫助:O)

來自德國漢堡的盛情款待

蒂莫

您應該能夠通過更改屬性(角度方式),無需訪問ng-click處理程序中的元素以及對該屬性使用ng-class和angular綁定來做到這一點。

<ul ng-controller="basketCtrl">
    <li ng-repeat="item in items" ng-class="{'changed': item.added}">
        <button ng-click="addToBasket(item)">
             <i ng-class="{'myBasketicon':!item.added,'myOKicon':item.added }">
             <span>{{item.added ? "Thanks for buying" : "Buy now"}}</span>
        </button>
    </li>
</ul>

然后在您的處理程序中執行以下操作:

$scope.addTobasket = function (item){
   item.added = true;
}

在大多數情況下,使用angular的全部目的是避免DOM操縱並讓angular管理它,您只需處理模型/視圖模型和綁定即可。

您應該為圖標類和文本添加方法,以根據對象的狀態更改其結果,或使用定制的自定義指令。 您絕對不希望像使用jQuery那樣進行任何DOM操作(更改文本/類等)。

對於基於方法的方法,為您的標記是這樣的:

<li ng-repeat="item in item">
    <button ng-click="addToBasket(item)">
         <i ng-class="getClass(item)">
         <span>{{getMessage(item)}}</span>
    </button>
</li>

並在您的控制器上:

.controller('ShoppingListCtrl', function($scope) {
    $scope.getClass = function(item) {
        return item.inBasket ? 'myOkIcon' : 'myBasketIcon';
    };

    $scope.getMessage = function(item) {
        return item.inBasket ? 'Thanks for buying' : 'Buy now';
    };
})

這也可以使用自定義指令來完成,這是一種超強大的處理方式(絕對值得弄清楚),但對於剛入門來說可能會過分殺傷。 如果您發現執行這些操作的方法與指令一起使用,則會增加很多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM