Dla jedynego edytora wizualnego próbuję stworzyć nową dyrektywę, która zapisuje styl CSS. Utknąłem w próbach uaktualnienia dyrektywy po kliknięciu pola wyboru, aby uczynić właściwość koloru tła przezroczystą.Utknąłem tworząc niestandardową dyrektywę stylu CSS
Oto mój (bez pracy) dyrektywy:
myApp.directive('customstyle', function() {
return {
restrict: 'E',
link: function (scope, element, attrs) {
var bgColor;
scope.$watch(attrs.myTransparent, function (value) {
if (value) {
bgColor = 'transparent';
} else {
bgColor = attrs.myBgcolor;
}
updateStyle();
}, true);
function updateStyle() {
var htmlText = '<style>.' + attrs.myClass + '{';
htmlText += 'background-color: ' + bgColor + ';';
htmlText += "}</style>";
element.replaceWith(htmlText);
}
updateStyle();
}
}
});
i html elementem:
<customstyle my-class="examplediv" my-transparent="settings.Window.Transparent" my-bgcolor="settings.Window.BackgroundColor"></customstyle>
Oto jsfiddle sytuacji: http://jsfiddle.net/psinke/jYQc6/
Każda pomoc będzie mile widziana.
Dzięki za odpowiedź. Na stronie, której będę używał, styl zostanie zastosowany do nieznanej liczby elementów na liście, więc ustawienie właściwości css dla każdego elementu nie wydaje się być właściwą drogą. Udało mi się sprawić, że działa. Okazało się, że musiałem przetworzyć wartość pola wyboru na wartość boolowską, aby uruchomić ją. I nie zamieniłem elementu, ale zmienię w nim html. Nadal nie jestem pewien, czy jest to najlepszy sposób na zrobienie tego. Mam trochę więcej do zrobienia, jak sądzę. Oto działająca jsfiddle: http://jsfiddle.net/psinke/YJxR9/ –
@Peter, $ observe zawsze zwróci ciąg znaków, więc zamiast 'if (parseBool (myBool)) {' możesz po prostu zrobić to: 'if (myBool == "true") {. (Model ng użyje tylko wartości 'true' i' false' dla pola wyboru, więc nie trzeba szukać innych możliwych wartości boolowskich.) –