https://github.com/angular/angular.js/wiki/Understanding-Scopesによると、に接続されたプリミティブにデータバインドしようとするのは問題$scope
です:
スコープの継承は通常簡単で、多くの場合、それが起こっていることを知る必要さえありません... プリミティブ (数値、文字列、 boolean) 子スコープ内から親スコープで定義されます。ほとんどの人が期待するようには機能しません。
おすすめは
プリミティブに関するこの問題は、常に「.」を使用するという「ベスト プラクティス」に従うことで簡単に回避できます。あなたのngモデルで
今、私はこれらのルールに違反するこの非常に単純なセットアップを持っています:
HTML:
<input type="text" ng-model="theText" />
<button ng-disabled="shouldDisable()">Button</button>
JS:
function MyController($scope) {
$scope.theText = "";
$scope.shouldDisable = function () {
return $scope.theText.length >= 2;
};
}
これは本当に悪いことですか?どういうわけか、子スコープを使用しようとすると、これは恐ろしい方法で私を台無しにするのでしょうか?
次のようなものに変更する必要がありますか
function MyController($scope) {
$scope.theText = { value: "" };
$scope.shouldDisable = function () {
return $scope.theText.value.length >= 2;
};
}
と
<input type="text" ng-model="theText.value" />
<button ng-disabled="shouldDisable()">Button</button>
ベストプラクティスに従うには?前者に存在する恐ろしい結果から後者が私を救う具体的な例を教えてください。