Вопросительный знак в директиве AngularJs

Я видел некоторую директиву, используя знак вопроса ('?') в определении свойств области так:

    app.directive('userInfo', function() {
        return {
        restrict: 'A',
        scope: {prop: '=?'},
        templateUrl: 'some/template/url',
    };

Я искал его, и единственное, что я видел, было следующим: в чем смысл '=?' в angularJS директива изолировать декларацию области?. Но он не работает так, как он там объясняет. Мне удалось запустить мое приложение и не было исключено исключение.

Может ли кто-нибудь более подробно рассказать об этом?

Ответ 1

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

Добавление ? обозначает свойство как необязательное. Как упоминалось в документации для $compile:

Вы можете избежать этого поведения, используя =? или =? attr, чтобы указать свойство как необязательное.

Я думаю, что документация может быть немного устаревшей в этой области. NON_ASSIGNABLE_MODEL_EXPRESSION отображается только в более старых версиях источника.

Обратите внимание, что исключение вызывается только после того, как вы попытаетесь записать свойство scope. Я собрал быстрый планшет, чтобы продемонстрировать проблему: http://plnkr.co/edit/hjUq6ZisuRG2C3mZpRDj?p=preview