От новичка до гуру: Курсы программирования на CyberDuff

Что изменилось в AngularJS 1.2.0-rc.3, что мешает ng-click иметь правильное значение модели?

У нас есть некоторый код в ng-click, который сломался с версией 1.2.0-rc.3, потому что значение в области не было обновлено после щелчка. Вот урезанная версия:

HTML:

<div ng-app="" ng-controller="MyCtrl">
    <input type="checkbox" ng-model="checkAll" ng-click="allChecked()"/>
    <input type="checkbox" ng-model="check1"/>
    <input type="checkbox" ng-model="check2"/>
    <input type="checkbox" ng-model="check3"/>
    <input type="checkbox" ng-model="check4"/>
    <input type="checkbox" ng-model="check5"/>
    <p/>
    All: {{checkAll}}<br/>
    1: {{check1}}<br/>
    2: {{check2}}<br/>
    3: {{check3}}<br/>
    4: {{check4}}<br/>
    5: {{check5}}<br/>
</div>

JavaScript:

function MyCtrl($scope)
{
    $scope.allChecked = function() {
        console.log($scope.checkAll);
        if ($scope.checkAll)
        {

            $scope.check1 = true;
            $scope.check2 = true;
            $scope.check3 = true;
            $scope.check4 = true;
            $scope.check5 = true;
        }
        else
        {
            $scope.check1 = false;
            $scope.check2 = false;
            $scope.check3 = false;
            $scope.check4 = false;
            $scope.check5 = false;
        }
    }
}

Поиграйтесь с 1.2.0-rc.2: http://jsfiddle.net/73E26/

Теперь с точно такой же настройкой для 1.2.0-rc.3 (http://jsfiddle.net/LZR6j/), теперь он больше не работает должным образом. $scope.checkAll ложно, даже если оно проверено. Таким образом, модель не обновляется до вызова прослушивателя кликов, как это было в версии 1.2.0-rc.2. Что изменилось, что вызывает это? Я обнаружил, что могу выполнить эту работу, используя ng-change вместо ng-click (http://jsfiddle.net/8VV7N/), но я хочу понять, что происходит, поэтому буду основывать на этом будущие решения. Кто-нибудь может пролить свет на это?


Ответы:


1

Проблема в том, что ng-click и ng-model имеют неоднозначный приоритет и если вы определите их для одного и того же элемента, неясно, в каком порядке они будут запущены.

См., например, этот вопрос: ng-click не обновляет модель

13.11.2013
  • Спасибо за ответ. Так в чем же разница между ng-click и ng-change, благодаря которой работает ng-change? Или это случайно, что он работает так же, как ng-click? 14.11.2013
  • Я предполагаю, что они работали случайно, или, возможно, потому, что ng-change устанавливает $watch на expression для ng-model и что $watch запускается только после того, как ng-model обработает значение (установив его на правильное значение false). Однако, по моему опыту, лучше избегать таких договоренностей. 14.11.2013
  • Новые материалы

    5 простых концепций Python, ставших сложными
    #заранее извините 1) Переменные x = 4 y = 5 Переменная в Python — это символическое представление объекта. После присвоения некоторого объекта переменной Python мы приобретаем..

    «Освоение вероятности: изучение совместной, предельной, условной вероятности и теоремы Байеса —…
    Виды вероятности: Совместная вероятность Предельная вероятность Условная вероятность Диаграмма Венна в вероятностях: В “Set Theory” мы создаем диаграмму Венна...

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..