2016-10-14 3 views
1
<html> 
    <head> 
     <title>Test</title> 
     <meta charset="UTF-8"> 
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <script src="angular.js"></script> 
    </head> 
    <body ng-app=""> 
     <p>There {{count = 1; (count == 1 ? "is" : "are")}} one of them</p> 
     <div ng-init="count = 7; unit = 'days'; collection = 'week'"> 
      <p> 
       There are {{count}} {{unit}} in a {{collection}}. 
      </p> 
     </div> 
    </body> 
</html> 

Здесь count сначала назначен 1 затем снова назначен 7 но результат показать, как этоПочему угловые js не использовали последнее присвоенное значение?

Существует одна из них

Есть 1 дней в неделю.

Почему это происходит. Почему глобальное правило охвата не соблюдалось? Необходимо указать последнее присвоенное значение!

+5

Поскольку выражение в '{{}}' (интерполяция) будут оценивать по каждому переваривать цикл , И выражение 'count = 1' получило оценку несколько раз, и вы видите значения' 7', ** Нижняя строка не использует '{{}}' для присвоения переменных ** –

+0

Она была назначена, но перезаписана один раз, когда шаблон отображается в следующем цикле дайджеста. –

+0

@PankajParkar вы должны написать свой комментарий в качестве ответа;) –

ответ

2

Потому что выражение внутри {{}} (интерполяция) оценивается в каждом цикле дайджест, чтобы синхронизировать с тем, что у вас есть в соответствующих models. И выражение count = 1 оценивалось несколько раз, когда цикл дайджесту начинается, поэтому вы видите 7 значений.

Нижняя строка не использует {{}} для присвоения переменных. Всегда указывать переменный внутренний контроллер. ng-init также не получил Идея и лучше всего инициализировать переменную, сделайте это внутри самого контроллера.

+0

спасибо за ясный ответ. Не могли бы вы указать любую онлайн-ссылку. – gvgvgvijayan

+1

@gvgvgvijayan вы можете сослаться на эту статью (https://www.ng-book.com/p/The-Digest-Loop-and-apply/) и [это] (https://www.sitepoint.com/понимание-углы главного применить дайджест /). –

0

Если вы не исследуя этот частный случай с присвоением значений в угловых, но строительство какого-либо компонента, чтобы показать правильное сообщение на основании значения, иметь в виду ngPluralize директивы.

С, что вы могли бы реорганизовать компонент к этому:

<ng-pluralize count="count" 
       when="{'one': 'There is one {{unit}} in a {{collection}}', 
        'other': 'There are {} {{unit}}s in a {{collection}}'}"> 
</ng-pluralize> 

Вы можете играть с этим шлепнуть: http://www.webpackbin.com/N1uAIycAZ

Смежные вопросы