2016-02-02 6 views
1

Я хотел бы иметь возможность передать литерал объекта конфигурации в мой фильтр из представления. Для этого я добавил второй, необязательный параметр в свой фильтр. Я могу передать литерал объекта фильтру, если я определяю его в контроллере, однако код разбивается, если я пытаюсь определить объект в представлении.Как передать объект литералу фильтру из вида в угловом?

$scope.message = 'Hello World'; 
$scope.configObj = {uppercase: true, exclamationMarks: 5}; 

<p>OK {{message | shoutFilter}}</p> 
<p>OK {{message | shoutFilter:configObj}}</p> 
<p>ERROR {{message | shoutFilter:{'exclamationMarks':2}}}</p> 

Вы можете увидеть довольно надуманный пример здесь: https://jsbin.com/rojekitixo/1/edit?html,js,console,output

Я получил сообщение об ошибке:

Error: [$parse:ueoe] http://errors.angularjs.org/1.4.0/$parse/ueoe?p0=message%20%7C%20shoutFilter%3A%7BexclamationMarks%3A2 

ответ

0

Удалить одиночные кавычки из вашего объекта буквальным.

{exclamationMarks: 2} 
+0

Я использую ['shoutFilter: {exclamationMarks: 2}'] (https://jsbin.com/pebedilufe/1/edit?html,js,console,output), и я получаю ту же ошибку. –

+0

Не знаете, что вы изменили в jsbin. Я сделал это, и это сработало. Можете ли вы вернуть jsbin в исходные коды? – brewsky

+0

Появляется работа:

Передача объекта, определенного в поле зрения, разрывает фильтр {{message | shoutFilter: {exclamationMarks: 2}}}

brewsky

0

Как было предложено ОП в комментариях к ответу @ brewsky, в объекты литералы, передаваемые фильтры в шаблонах должны быть разделены пробелом от фигурных скобок всего выражения.

Например, это может пригодиться с фильтром angular-translate:

<button>{{'logout' | translate:{first: ctrl.name, last: ctrl.surname} }}</button> 
                    ^
                   Here be space 

Обратите внимание на пространство, оставленное преднамеренно между кронштейном закрытия литерал объекта, :2} и закрывающей скобки выражения }}</p>.

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