2014-09-15 2 views
11

Я видел некоторые директивы, используя знак вопроса («?») В определении свойств сферы применения, как так:Вопросительный знак в директиве AngularJs

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

Я смотрел на нее и думаю только я увидел это: what's the meaning of '=?' in angularJS directive isolate scope declaration?. Но он не работает так, как он это объясняет. Мне удалось запустить мое приложение и не было исключено исключение.

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

+0

Какой код приложения? Как мы можем объяснить что-либо, если мы не знаем его код? –

+0

В соответствии со ссылкой, которую вы отправили, исключение не должно быть выбрано, потому что знак вопроса делает необязательную переменную переменной «prop». – efeder

+0

В моем случае я не использовал '?' и никакого исключения не было выброшено – Rivi

ответ

13

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

Добавление ?, отмечает недвижимость как факультативно. Как указано в документе documentation for $compile:

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

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

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

+0

Да, я понял. это был непростой вопрос. Моя проблема в том, что когда я не использую '?' и не используя свойство «prop» в элементе no Exception. поэтому я подумал, что есть другое объяснение использования '?' – Rivi

+0

@ user1857251 Я обновил свой ответ. Надеюсь, теперь это станет более полезным :) –

+0

Да, я думаю, что документация устарела. Я попробовал это, и, как вы сказали - когда вы пытаетесь изменить значение свойства scope, есть исключение, потому что его неопределенный (если вы не использовали '?'). Благодаря! – Rivi

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