2016-08-05 3 views
3

Скажем, например вы следующее:Угловая оценить выражение, когда устанавливается как свойство

$scope.element = 
      { 
       html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>', 
       classExpression : " {{inactive == 'true' ? 'btn-success': 'btn-danger'}}", 
      } 

Как вы можете видеть, что мы имеем veriable называется classExpression, который является выражением я хотел бы добавить к элементу

<span ng-bind-html="element.html | trust" class="{{element.classExpression}}">Text in between<span> 

Однако он не оценивает его.

Так что мой вопрос, как это возможно (если это вообще возможно)

fiddle

Обновлена ​​моя скрипка (оно не было работать)

+0

Почему бы просто не использовать нг-класс? https://docs.angularjs.org/api/ng/directive/ngClass – Wake

+0

попробуйте использовать ng-класс –

+0

@Wake can not похоже, чтобы заставить ng-класс работать либо с выражением как свойство объекта –

ответ

1

Я бы сказал, рефакторинг свой объект есть нижеследующий структура. Я действительно не рекомендую вам добавлять выражения в string.

HTML

<span ng-bind-html="element.html" ng-class="element.classExpression[element.inactive]"> 
    Text in between 
</span> 

Код

$scope.element = { 
    html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>', 
    classExpression: { 
     'true': 'btn-success', 
     'false': 'btn-danger' 
    }, 
    inactive: 'true' 
}; 

Forked Fiddle

+0

Это работает. Однако вопрос в миллион долларов, как вы это делаете с другими значениями, чем true/false? –

+0

@MarcRasmussen в зависимости от ситуации вы можете в любое время изменить «ключи» вашего значения «classExpression» –

+0

@gyc, могу ли я знать, что вы хотели сказать? FYI, 'ng-class' не работает с' {{}} директивой интерполяции –

0

Вы можете использовать нг-класс напрямую, а не связывать его к элементу выражения? Он будет переоцениваться whever ваш scope.inactive изменится (или вы могли бы связать неактивный к вашему элементу.

например

<span ng-bind-html="element.html | trust" ng-class="{'btn-success' : element.inactive, 'btn-danger' : !element.inactive}">Text in between<span> 

в угловых 1.1.4 и новее вы можете также использовать тройной оператор

<span ng-class="element.inactive ? 'btn-success' : btn-danger"> 

Здесь предполагается, что вы поместите неактивным на ваш элемент привязки. вы можете непосредственно привязать к вашему неактивным (по размаху, а).

+0

Можете ли вы посмотреть на эту скрипту: http://jsfiddle.net/Lvc0u55v/7995/и скажите мне, что я сделал неправильно? –

+0

Я обновил ваш jsfiddle, чтобы использовать ng-класс, оценивая значение области видимости вместо разбора значения в виде «classExpression» - http://jsfiddle.net/Lvc0u55v/8001/ - Это работает (попробуйте изменить, например, ваше неактивное значение на true/false и см. изменения класса). – CmdrTchort

+1

Есть пара проблем с вашим подходом: если вы хотите привязать, вам нужно выражение, оценивающее дайджест объема. Здесь вы пытаетесь привязать задание своего класса к выражению, которое не будет эвакуировано. Если вас интересует только привязка времени (с использованием значения), вы можете изменить свой код. Просто используйте class = "{{className}} и используйте нормальное выражение в вашем js-коде (и пусть className) будет фактическим классом. Я бы предпочел использовать ng-класс с выражением, как в jsfiddle. – CmdrTchort

0

вы должны удалить {{ }} от вашего 'classExpression' вроде как -

classExpression : " inactive == 'true' ? 'btn-success': 'btn-danger'" 

, а также использовать ng-class вроде как -

ng-class="{{element.classExpression}}" 
+0

тестирование со скрипкой : http://jsfiddle.net/Lvc0u55v/7993/, похоже, не работает :( –

+0

Ваша ошибка неправильная, а также перед голосованием вниз, пожалуйста, проверьте правильно в конце. Я проверил его отдельно и его работоспособность. –

+1

Я отказался, причина в том, что интерполяция не будет работать с директивой 'ng-class'. –

0

Возможно сделать ваш classExpression функцию:

$scope.element = 
     { 
      html: '<a type="button" class="btn btn-xs btn-rounded m-r-sm"><i class="icon icon-user-unfollow"></i></a>', 
      classExpression : function(){ 
       return $scope.inactive == 'true' ? 'btn-success': 'btn-danger'; 
      } 
     } 
+0

Вот рабочий пример http://jsfiddle.net/k6d40aso/ – Wake

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