Ответ 1
Я не совсем уверен в вашем вопросе. Но я думаю, что вы задаетесь вопросом, почему существуют разные стили синтаксиса в директивах angular. Прежде всего, пожалуйста, взгляните на это сообщение: Разница между двойной и одной фигурной скобкой в angular JS? Ответ объясняет разницу между {{}}
, {}
и никаких скобок.
Для ваших конкретных примеров, как указано в документации: ng-href
требуется шаблон (любая строка, которая может содержать разметку {{}}
), а ng-if требует выражения - например. вы не можете писать {{}}
, потому что angular оценивает его.
Если вы посмотрите на источники angular, вы увидите, что ng-href
использует attr.$observe
, а ng-if использует функцию $scope.$watch
. $наблюдается при каждом изменении значения атрибута. $watch вызывается, когда выражение приводит к новому значению.
Но почему эти два разных способа? Я думаю, что один момент - это простота использования и читаемость кода. Прямо сейчас вы можете написать:
<a ng-href="http://yourdomain.com/users/{{userId}}/post/{{postId}}">title</a>
Как вы можете видеть, вы пишете только выражение для динамически вставленных значений userId
и postId
. Если ng-href
также использовал бы функцию $watch
, которую мы должны были написать (не делайте этого, потому что она не работает - она только демонстрирует разницу):
<a ng-href="'http://yourdomain.com/users/'+userId+'/post'+postId">title</a>