2013-09-20 2 views
9

мне нравятся примеры СПОСОБОМ самозагрузки выглядитДинамически изменить класс CSS свойства с AngularJS

<css> 
.bs-docs-example { 
    background-color: #FFFFFF; 
    border: 1px solid #DDDDDD; 
    border-radius: 4px 4px 4px 4px; 
    ... 
} 
.bs-docs-example:after { 
    background-color: #F5F5F5; 
    border: 1px solid #DDDDDD; 
    border-radius: 4px 0 4px 0; 
    color: #9DA0A4; 
    content: "Title"; 
    ... 
} 

Но мне нужно изменить содержание в .bs докторантов-пример: после того, как динамически как это:

<html> 
<div class="bs-docs-example" ng-style="content:'{{ title }}';" 
    ng-repeat="title in titles"> 

Возможно ли это? Как?

+0

Ваш html-код содержит угловые ярлыки js. Но: после будет работать по-другому. Поиск css: после документации. – Jeyasithar

+0

Окей: после не является частью dom, но кто-то нашел способ динамически изменять CSS, он применим ко всем: См. Этот пример (до и после совершенно одинаковы) http: // jsfiddle .net/aKbmq/ – Romain

ответ

1

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

<css> 
.bs-docs-example { 
    background-color: #FFFFFF; 
    border: 1px solid #DDDDDD; 
    border-radius: 4px 4px 4px 4px; 
    ... 
} 
.bs-docs-example-title { 
    background-color: #F5F5F5; 
    border: 1px solid #DDDDDD; 
    border-radius: 4px 0 4px 0; 
    color: #9DA0A4; 
    content: "Title"; 
    ... 
} 

и использовать его как это:

<html> 
<div class="bs-docs-example" ng-repeat="title in titles"> 
<span class="bs-docs-example-title">{{ title }}</span> 
</div> 

Я надеялся, что помогает.

5

Вы можете использовать ng-style для динамического изменения свойства класса CSS с помощью функции AngularJS.

Смотрите ниже код этого звенеть (http://plnkr.co/edit/n4NlIfgfXIiNHWu5oTzS?p=preview)

Я создал массив цветов, которые будут использоваться ng-repeat и изменить background-color каждого элемента динамически. Обратите внимание, что хотя все элементы имеют класс original с красным фоном, это значение обновляется (переопределяется) с новым цветом из массива.

Итак, теперь вы, наверное, думаете: «Круто Если я могу изменить свойство цвета класса динамически я должен быть в состоянии сделать то же самое с любой другой собственностью, как и content один прямо!?!?»

Ответ: «Да & No».

Кажется, что псевдоселекторов, таких как :after и :before, обрабатываются по-разному.

«Несмотря на то, что они визуализируются браузерами через CSS, как если бы они были , как и другие элементы реального DOM сами, псевдо-элементы не являются частью в DOM, и, таким образом, вы не можете выбрать и манипулировать ими непосредственно с AngularJS, JQuery (или каких-либо интерфейсов JavaScript в этом отношении»

вы можете найти полное объяснение на этот пост: (https://stackoverflow.com/a/5041526/1310945)

сказал, что, я полагаю, вы, вероятно, удастся обойти эту проблему , usin g это решение (https://stackoverflow.com/a/16507264/1310945).

Я еще не пробовал - но я мог бы сделать в другой раз просто для удовольствия.

На стороне примечания, возможно, есть лучшее решение (и более стиль AngularJs) для того, что вы пытаетесь сделать, используя ng-class.

В любом случае надеюсь, что это по крайней мере отправит вас в правильном направлении. :)

<!doctype html> 
<html lang="en" ng-app="myApp"> 
<head> 
<meta charset="UTF-8"> 
    <title>Document</title> 

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js"></script> 

    <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootswatch/3.0.0/united/bootstrap.min.css"> 

    <style> 
    ul { 
     list-style-type: none; 
     color: #fff; 
    } 

    li { 
     padding: 10px; 
     text-align: center; 
    } 

    .original { 
     background-color: red; 
    } 
    </style> 

    <script> 

    var myApp = angular.module('myApp', []); 


    myApp.controller("myAppCtrl", ["$scope", function($scope) { 

     $scope.colors = ['#C1D786', '#BF3978', '#15A0C6', '#9A2BC3']; 

     $scope.style = function(value) { 
      return { "background-color": value }; 
     } 

    }]); 


    </script> 

</head> 
<body> 

<div ng-controller="myAppCtrl"> 
    <div class="container"> 
    <div class="row"> 
     <div class="span12"> 
     <ul> 
      <li ng-repeat="color in colors"> 
      <h4 class="original" ng-style="style(color)"> {{ color }}</h5> 
      </li> 
     </ul> 
     </div> 
    </div> 
    </div> 
</div> 

</body> 
</html> 
+0

Спасибо за ваш ответ, но я пытался получить доступ: после этого не входит в DOM. В этом случае я ищу гораздо более сложный способ сделать что-то простое. – Romain

0

я написать решение, которое работает для меня:

Html страницу

 <div class="list-group"> 
     <a href ng-click="setSelectedLink('wiki')"  ng-class="{active:isSelectedLink('wiki')}"  class="list-group-item">Wiki</a> 
     <a href ng-click="setSelectedLink('tacheList')" ng-class="{active:isSelectedLink('tacheList')}" class="list-group-item">Link</a> 
     </div> 

Внутри вашего контроллера этой страницы HTML: JS

$scope.tab = 'wiki';//by default the first is selected 
    $scope.setSelectedLink = function (tabId) { 
     $scope.tab = tabId; 
     console.log("setTab: "+tabId); 
     $location.path('/'+tabId); 
    } 
    $scope.isSelectedLink = function (tabId) { 
     return $scope.tab === tabId; 
    } 
14

я сделал что-то подобное используя ng-bind-html, мне не хватало контроля над содержимым, поэтому я изменяю класс, который будет обрабатывать он впоследствии

var somecolorvar = "#F00"; 
$scope.mystyles = ".something:after { color: " + somecolorvar + "; }"; 

<style ng-bind-html="mystyles"></style> 

Тогда вы получите что-то вроде этого

<style>.something:after { color: #F00; }</style> 

EDIT: Вы можете также отрегулировать вопрос выше с помощью CSS ATTR(), который будет тянуть атрибут в содержание

.something:after { 
    display: inline; 
    content: '- Value ' attr(value); 
} 

<div class="something" value="123">this is</div> 
<div class="something" value="456">this be</div> 

Вы увидите что-то вроде:

this is - Value 123 
this be - Value 456 
+0

Это именно то, что я искал! Благодаря! – TWright

+0

Отлично! Спасибо! –

+0

Отлично! это то, что я искал – nabin

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