2015-01-02 4 views
2

Показывать не обновляется, когда установлен флажок. Должен ли я использовать $ scope. $ Apply? Мне нужно, чтобы Current state менялся между YES и NO в зависимости от того, установлен флажок или нет. Here's код на JSbinугловой вид не обновляется, когда установлен флажок

<!DOCTYPE html> 
<html ng-app="notesApp"> 
    <head> 
    <title>Notes App</title></head> 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.8/angular.js"></script> 
    <body ng-controller="MainCtrl as ctrl"> 
    <div> 
     <h2>What are your favorite sports?</h2> 
     <div ng-repeat="sport in ctrl.sports"> 
     <br/> 
     <label ng-bind="sport.label"></label> 

     <div> 
      <input type="checkbox" 
      ng-model="sport.selected" 
      ng-true-value="YES" 
      ng-false-value="NO"> 
     </div> 


     <div> 
      Current state: {{sport.selected}} 
     </div> 

     </div> 
    </div> 
    </body> 
</html> 


И вот JS:

angular.module('notesApp', []) 
.controller('MainCtrl', [function() { 
    var self = this; 
    self.sports = [ 
    {label: 'Basketball', selected: 'YES'}, 
    {label: 'Cricket', selected: 'NO'}, 
    {label: 'Soccer', selected: 'NO'}, 
    {label: 'Swimming', selected: 'YES'} 
    ]; 

}]); 

ответ

10

Вам нужно добавить цитаты, потому что это angularjs выражение, и это также должно быть постоянным. Если для углового выражения используется значение YES, то угловое выражение будет искать переменную области видимости с именем YES, но это не будет постоянным угловым выражением, так как значение YES может измениться.

Вместо этого вы хотите просто установить значение в значение «Да», как вы хотите назначить значение в качестве постоянной строки «ДА». Если вы посмотрели в консоли, вы бы увидели: Expected constant expression for 'ngTrueValue', but saw 'YES'.

<input type="checkbox" 
      ng-model="sport.selected" 
      ng-true-value="'YES'" 
      ng-false-value="'NO'"/> 

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

+0

Спасибо. Вы знаете, почему мне нужно добавить дополнительные одиночные кавычки? – raneshu

+0

Краткое объяснение правильного ответа @Wayne Ellery: вы управляете строкой, а не объектом с областью, вместо одиночных кавычек в «YES», вы должны использовать ее дважды «YES», чтобы правильно ее использовать для распознавания связывания. – arman1991

+0

Можно ли добавить в качестве $ apply или $ watch вместо котировки дважды? И как это будет работать? – raneshu

0

См constexpr в справочной документации об ошибке от angularjs. В нем указано:

Некоторые атрибуты, используемые в сочетании с ngModel (например, ngTrueValue или ngFalseValue), будут принимать только постоянные выражения.