5

JSON ソースから HTML リストとしてバインドされたメッセージのリストがあります。各画像の横に削除ボタンがあります。メッセージの横にある削除ボタンがクリックされたときに、リストからメッセージを削除したいと考えています。

HTML:

<div ng-app="myApp">
    <ul ng-controller="MessagesCtrl">
        <li ng-repeat="message in messages.data" id="message{{message.id}}">
            <a href="#" class="messageIcon">{{message.message}}</a> 
            <a ng-click="deleteItem()">x</a>
        </li>
    </ul>
</div>

JS:

    var myApp = angular.module("myApp", []);
    myApp.factory("Messages", function () {
    var Messages = {};
    Messages.data = [
        {
            id: "1",
            message: "Message 1"
        },
        {
            id: "2",
            message: "Message 2"
        },
        {
            id: "3",
            message: "Message 3"
        },
        {
            id: "4",
            message: "Message 4"
        }
    ];
    return Messages;
});

function MessagesCtrl($scope, Messages) {
    $scope.messages = Messages;

    $scope.deleteItem = function () {
        var id = this.message.id;
        //alert(id);
        Messages.data.delete({ id: id }, function () {
            $("#message" + id).fadeOut();
        });
    }

}

フィドル: http://jsfiddle.net/L82S7/

これを行うために私が見つけた例では、「.delete」または「.splice」のいずれかを使用しています - どちらも次のようなコンソールエラーを生成します:

TypeError: Object #<Object> has no method 'splice'

誰でもこれを機能させる方法を提案できますか?

ありがとう!

4

2 に答える 2

19

spliceここでうまく動作します:

<a ng-click="deleteItem($index)">x</a>

$scope.deleteItem = function (index) {
    Messages.data.splice(index, 1);
}

http://jsfiddle.net/L82S7/1/

于 2013-09-13T12:10:13.860 に答える
3

はいsplice、正常に動作します。私は別の方法でそれを行いましたhttp://jsfiddle.net/cmyworld/NEPZF/1/を参照してください

基本的には商品そのものを渡します。

于 2013-09-13T12:14:58.957 に答える