Согласно https://github.com/angular/angular.js/wiki/Understanding-Scopes, привязать данные к примитивам, прикрепленным к вашему $scope
, проблематично:
Наследование области действия обычно является простым, и вам часто даже не нужно знать, что это происходит... пока вы не попробуете двустороннюю привязку данных (например, элементы формы, ng-модель) к примитиву (например, числу, строке, логический), определенный в родительской области внутри дочерней области. Он не работает так, как большинство людей ожидает, что он должен работать.
Рекомендация
Этой проблемы с примитивами можно легко избежать, следуя «лучшей практике» всегда иметь «.» в ваших 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>
так что я следую передовой практике? Какой конкретный пример вы можете мне привести, где последнее спасет меня от каких-то ужасных последствий, которые имело бы место в первом?