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

Есть ли способ предоставить значение по умолчанию для изолированного псевдонима области?

Скажите, что у меня есть следующее как часть определения directive:

scope: {
    prop1: '@'
}

Есть ли способ для prop1 получить значение по умолчанию, если директива не имеет атрибута prop1? Конечно, я могу проверить, определено ли это сами и установить его, но свойство не всегда устанавливается, когда вы ожидаете. Мне просто интересно, есть ли какой-либо синтаксис, который я пропустил в документации, или если есть хороший стандартный способ сделать это. Спасибо.

4b9b3361

Ответ 1

Это зависит от того, какое значение по умолчанию вы хотите назначить. Если вы хотите по умолчанию указать имя в родительской области, установка значения атрибута по умолчанию в директиве compile будет работать:

  compile: function(element, attrs) {
    if (attrs.person == undefined) {
      attrs.$set("person", "person");
    }
  ...

Если вы хотите, чтобы директива предоставила значение по умолчанию, она немного запуталась, так как Angular не позволит вам назначить псевдоним в области выделения (вы получите исключение "непривязанное выражение модели" из который пытается распространить назначение на изолированную родительскую область). Однако вы можете предотвратить это, пометив атрибут как необязательный (что означает, что Angular не будет регистрировать слушателя, когда свойство оммитировано).

  scope: {
    person: "=?"
  },
  link: function(scope, element, attrs) {
    if (scope.person == undefined) {
      scope.person = "Bob";
    }
    ...
  }

Ответ 2

scope['prop1'] = scope['prop1'] || '@'