1

この問題を説明する最善の方法は、例です。ここを参照してください。

http://jsfiddle.net/YWVDK/

Javascript

String.prototype.status = {active:false}
String.prototype.name = 'Testing';

var test = function($scope) {
    $scope.rows = [];

    $scope.add = function() {
        $scope.rows.push(new String('test'));
    }
}

HTML

<div ng-app>
    <table ng-controller="test">
        <tr><td colspan="2"><button type="button" ng-click="add()">Add</button></td></tr>
        <tr ng-repeat="row in rows">
            <td>{{row.name}}</td>
            <td><input type="checkbox" ng-model="row.status.active"/></td>
        </tr>
    </table>
</div>

基本的に、チェックボックスを行のプロトタイプ プロパティ (この場合はactive )にバインドしたいと考えています。

ご覧のとおり、追加ボタンを数回クリックしてエントリの 1 つにチェックを入れようとすると、すべてのエントリがチェックされます。これは、プロトタイプに手動で導入されたプロパティで ngModel を使用する場合にのみ発生します。

4

3 に答える 3

0

問題は.status、オブジェクトのインスタンスに設定している{active:false}ため、1 つのインスタンスがすべてrowの に反映される更新の変更です。

値を設定.statusした場合:

String.prototype.status = false

そして使用:

<td><input type="checkbox" ng-model="row.status"/></td>

それはうまくいくでしょう。実際、問題の最も簡単な解決策は、次の行を削除することです。

String.prototype.status = {active:false}
于 2013-10-07T15:02:34.020 に答える
0

関数のプロパティを追加するprototypeと、それは共有プロパティになります。作成中に各インスタンスに「アクティブ」を追加する必要があります。これを行う必要があります:

var test = function($scope) {
    $scope.rows = [];

    $scope.add = function() {
        var test = new String('test');
        test.name = 'Testing';
        test.active = true;
        $scope.rows.push(test);
    }
}

実際のフィドルの例: http://jsfiddle.net/YWVDK/3/

于 2013-10-07T14:55:40.013 に答える