0

AngularJS コントローラーでカスタム オブジェクトと $scope プロパティを使用する方が良い方法と考えられますか?

それともコントローラーのplateCheckプロパティにアタッチしたほうがいいのでしょうか?$scope

オブジェクトのバージョン

app.controller('PlateCheckCtrl', ['$scope', 'PlateCheckService', function ($scope, PlateCheckService) {
    var plateCheck = {
        plateNumber: '',
        message: '',
        alertClass: '',
        checkPlate: function (plateNumber) {
            var _this = this;

            PlateCheckService.checkPlate(plateNumber).then(function (response) {
                _this.message = response.message;
                _this.alertClass = response.alertClass;
            });
        }
    };

    $scope.plateCheck = plateCheck;
}]);

$scope バージョン

app.controller('PlateCheckCtrl', ['$scope', 'PlateCheckService', function ($scope, PlateCheckService) {
    $scope.plateNumber = '';
    $scope.message = '';
    $scope.alertClass = '';
    $scope.checkPlate: function (plateNumber) {
        PlateCheckService.checkPlate(plateNumber).then(function (response) {
            $scope.message = response.message;
            $scope.alertClass = response.alertClass;
        });
    };
}]);

.$scope オブジェクト/プロパティを a で参照していない場合、間違っていることをどこかで読んだことがあると思いました。

<input type="text" data-ng-model="object.property" /> <-- Right Way
<input type="text" data-ng-model="property" /> <-- Wrong Way
4

1 に答える 1

3

オブジェクトのバージョンが優先されます。

プロトタイプの継承に関するangularjs wikiから。

プリミティブに関するこの問題は、>常に「.」を使用するという「ベスト プラクティス」に従うことで簡単に回避できます。あなたの ng-models で – 3 分間見ます。Misko は ng-switch での ?>primitive バインディングの問題を示しています。

「.」を持つ モデルでプロトタイプの継承が行われていることを確認します。したがって、ではなく使用してください。

プリミティブを本当に使用したい/使用する必要がある場合は、次の 2 つの回避策があります。

子スコープで $parent.parentScopeProperty を使用します。これにより、子スコープが独自のプロパティを作成できなくなります。親スコープで関数を定義し、子から呼び出して、プリミティブ値を親に渡します (常に可能であるとは限りません)。

于 2013-11-04T05:25:49.827 に答える