Angularjs Checkbox нечетное поведение
-
21-12-2019 - |
Вопрос
Некоторые друзья, и я работаю над проектом. Это второй проект, в котором я работаю с Angularjs, в настоящее время использовал версию 1.2.3.
Несмотря на то, что я иногда нахожу часть своего поведения нечетного, и не понимаю, почему что-то происходит.
Так что ситуация это ... У меня в моем файле cshtml Последующий файл:
<div class="checkbox">
<label>
<input name="somecheckbox" type="checkbox" ng-click="click()" ng-model="displayRegardlessOfSomething" />
<label>Display regardless of something</label>
</label>
</div>
<h1>{{displayRegardlessOfSomething}}</h1>
.
В моем файле JavaScript у меня есть следующий код внутри директивы:
в самом начале:
$scope.displayRegardlessOfSomething = true;
.
И у меня есть следующее:
$scope.click = function () {
console.log($scope.displayRegardlessOfSomething)
}
.
И всякий раз, когда я проверяю или снимаю флажок, я всегда получаю true ... однако, осознавая часть состоит в том, что содержание внутри <h1></h1>
теги меняется .... Итак, это как я изменяю значение переменной на HTML-слое, но не на уровне JavaScript ...
Почему это происходит?
Я решил проблему с помощью $ parent.displayregardlessofSomething, но я не понимаю, почему это исправило проблему ... Что вызвало проблему в первую очередь?
Решение
Я попробовал то, что вы сделали в скрипке, и это работает нормально для меня.
http://jsfiddle.net/nicolasmoise/x9kyu/1/ >
Тот факт, что он работает для вас, когда вы использовали $parent
, заставляет меня думать, что родительский контроллер не виноват здесь.Может быть, у вас есть две переменные с теми же именами?
p.s.: Помните, что в JavaScript примитивы передаются по значению, и объекты передаются посредством ссылки.Это причина многих ошибок для угловых разработчиков.Смотрите эту скрипку, где я иллюстрирую свою точку зрения.
с примитивами: http://jsfiddle.net/nicolasmoise/x9kyu/
с объектами: http://jsfiddle.net/nicolasmoise/x9kyu/2/
Другие советы
Если вы не уверены, что все живут в том же объеме, что почти никогда, вы должны всегда иметь точку где-то в своем выражении NG-модели .
myApp.controller('MyController2', function($scope) {
$scope.model = { displayRegardlessOfSomething: true };
$scope.click = function() {
console.log($scope.model.displayRegardlessOfSomething);
};
});
<input type="checkbox"
ng-click="click()"
ng-model="model.displayRegardlessOfSomething" />
.
См. см. Этот пулькер для деталей для живой демонстрации.