Подтвердить что ты не робот

Почему директива ng-href нужна {{}}, а другие директивы нет?

Мне просто интересно, почему мне нужно добавить двойные фигурные скобки для ng-href, в то время как некоторые другие директивы им не нужны?

<a ng-href="{{myScopeVar}}" ng-if="myScopeVar">link</a>

Обратите внимание, что ng-href требуется скобки, а ng-if - нет.

4b9b3361

Ответ 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>

Ответ 2

Даже если Iuse ng-href data-ng-href, он выдает ошибку для проверки. Я использовал <link rel="stylesheet" data-ng-href="{{datas}}" href="/">, чтобы пройти проверку ошибки.

Надеюсь, что это поможет кому-то.