AngularJS更新元素仅在其属性之一更改时才有效

时间:2018-11-21 23:29:43

标签: javascript angularjs

由于我是JS和AngularJS的初学者,所以我的问题可能很愚蠢,但我发现了一些问题。我有一个列表和一个函数:

$scope.persons = [{
        "id": 1,
        "name": "Mark",
        "alive": true
    }, {
        "id": 2,
        "name": "Tom",
        "alive": true
    }, {
        "id": 3,
        "name": "Jack",
        "alive": false
    }, {
        "id": 4,
        "name": "William",
        "alive": true
    }, {
        "id": 5,
        "name": "Scott",
        "alive": true
    }, ];
$scope.kill = function(person) {
        person = {
            "id": person.id,
            "name": person.name,
            "alive": !person.alive
        };
    console.log(person);
}

此列表用于创建表格。

<table>
    <tbody>
    <tr ng-repeat="person in persons">
        <td>Name : {{person.name}}</td>
        <td>Alive? : {{person.alive}}</td>
        <td>
            <button ng-click="kill(person)">{{person.alive?  'Kill' : 'Reborn'}}</button>
        </td>
    </tr>
    </tbody>
</table>

当我单击按钮时,应该切换person.alive的值。使用此代码将无法正常工作。但是,如果函数kill()是:

$scope.kill = function (person) {
        person.alive = !person.alive;
        console.log(person);
    }

有效!我在第一个函数中犯了错误还是只是正常现象?

此致

1 个答案:

答案 0 :(得分:0)

您编写的第一个函数的问题在于您创建了一个新人员,而不是修改传递给您的人员。您编写的第二个函数是正确的,因为它可以修改现有人员的正确属性。