Хотите исключить манипуляции с DOM из контроллера, поскольку рекомендуется, чтобы контроллеры содержали только бизнес-логику. У меня есть три кнопки, где я хочу подчеркнуть текст кнопки, если кнопка была нажата (jsfiddle):
CSS:
.underline {
text-decoration: underline;
}
HTML:
<div ng-app = "myApp" ng-controller = "MyController" >
<button ng-click = "onClick(test.a)">{{test.a.name}}</button>
<button ng-click = "onClick(test.b)">{{test.b.name}}</button>
<button ng-click = "onClick(test.c)">{{test.c.name}}</button>
</div>
JS:
var app = angular.module("myApp", []);
app.controller("MyController", function($scope) {
$scope.test = {
a: {name: "aaa"},
b: {name: "bbb"},
c: {name: "ccc"}
};
$scope.onClick = function () {
$("button").removeClass("underline");
$(event.target).addClass("underline");
};
});
Я безуспешно пытался следовать этой подсказке:
<button ng-class = "{ 'underline': select === test.a }" ng-click = "onClick(test.a)">{{test.a.name}}</button>
$scope.select = null;
$scope.onClick = function (abc) {
$scope.select = abc;
};
Вот jsfiddle для этой модификации, которая выдает синтаксическую ошибку, которую я не могу решить.
Попробуйте поместить ng-class в скобки следующим образом:
<some-element [ngClass] = "'first second'">...</some-element>
<some-element [ngClass] = "['first', 'second']">...</some-element>
<some-element [ngClass] = "{'first': true, 'second': true, 'third': false}">...</some-element>
<some-element [ngClass] = "stringExp|arrayExp|objExp">...</some-element>
<some-element [ngClass] = "{'class1 class2 class3' : true}">...</some-element>
Должен быть @Hölderlin
пришлось изменить версию фреймворка в jsfiddle. Теперь он работает так, как ожидалось.
спасибо,
[ngClass]
разрешает сообщение об ошибке, но не подчеркивает текст. Есть ли проблема со сравнением объектовselect === test.b
?