2014-10-06 2 views
-1

Я пытаюсь изменить значение флажка на основе другого значения флажка, но это изменение, похоже, не влияет на модель.Угловое обновление флажка не обновляет модель

Вот пример кода выпуска:

http://plnkr.co/edit/eFOn3cejwKU01LkKNC1s?p=preview

HTML файл

<!DOCTYPE html> 

    <html> 

     <head> 
     <script data-require="[email protected]*" data-semver="1.2.0-rc3-nonmin" src="http://code.angularjs.org/1.2.0-rc.3/angular.js"></script> 
     <link data-require="[email protected]*" data-semver="3.0.0" rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" /> 

     <link rel="stylesheet" href="style.css" /> 
     <script src="script.js"></script> 
     </head> 

     <body ng-app="main" ng-controller="DemoCtrl"> 
     <pre> 
     A value: {{a}} 
     B value: {{b}} 
     </pre> 
      A <input type="checkbox" ng-model="a" /> 
      B <input type="checkbox" ng-model="b" 
      ng-disabled="a" 
      ng-checked="!a && b" 
      /> 

     </body> 

    </html> 

И пустой контроллер:

var app = angular.module('main', []) 
     .controller('DemoCtrl', function($scope) { 

     }); 

Насколько я читал , изменение Dom не изменяет модель, и когда я пытаюсь вызвать $ apply, дайджест уже работает, поэтому я немного потерян.

Я не хочу ставить $ watch на первый флажок, потому что мой пример уже довольно сложный.

Есть ли альтернативное решение, которое не связано с написанием кода js в контроллере для этой проблемы?

+0

Я не совсем понятно, что вы пытаетесь сделать здесь. Вы пытаетесь изменить один флажок, щелкнув другого? Из того, что я интерпретирую, похоже, вы пытаетесь его проверить, если другой не проверен? Не могли бы вы уточнить, чтобы быть ясными. Вам не нужны часы для этого. – ajmajmajma

+0

То, что я пытаюсь сделать, - установить b-модель на false, если она отмечена. Таким образом, полная демонстрация будет проверкой b, затем проверьте a, b отключен и не отмечен, а модель b по-прежнему верна. – biaggi

+0

Спасибо всем за ваши комментарии, моя реальная проблема довольно сложная, чем эта, это просто упрощение Иллюстрируйте его. Мое окончательное решение будет состоять в том, чтобы $ смотреть элемент «a», потому что даже когда b не снят, как только это было модификацией dom, и даже когда оно было вызвано угловой директивой, это не будет обрабатывается в дайджесте, поэтому, если в элементе dom или модели нет события, дайджест не будет принимать во внимание это изменение. – biaggi

ответ

1

Вот является plunker, показывающий способ установки значения б в модели к ложным, когда нажата и установлена ​​истина, без изменение контроллера.

http://plnkr.co/edit/rL6tTp5NfBzroZ2zSOgO?p=preview

И вот что я изменил, чтобы сделать это - увидеть Ng с переменой

A <input type="checkbox" ng-model="a" ng-change="b=!a" />