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