gpt4 book ai didi

javascript - AngularJS:当 css 类发生变化时如何通过切换更改颜色属性?

转载 作者:行者123 更新时间:2023-11-29 10:41:31 25 4
gpt4 key购买 nike

我是 AngularJS 的新手,已经在这个论坛上找到了很多有用的答案,但是下面的项目让我抓狂。

首先,让我告诉你我想做什么:我确实有一个元素,我想在运行时更改它的颜色属性,但前提是该特定元素具有“事件”类。

因此,我创建了一个如下所示的指令:

OfficeUIRibbon.directive('officeActiveStyle', function () {
return {
restrict: 'A',
link: function (scope, element, attr) {
scope.$watch(function() {
return element.attr('class');
}, function(newValue, oldValue) {
if (newValue !== oldValue) { // Values will be equal on initialization
alert('Changed');
}
});
}
};
});

据我所知,这确实会监视属性类,并且如果检查它们确实会确保在应用程序首次启动时不会触发监视。

现在,正在使用 ng-click 指令设置元素的类属性。

当我现在执行 HTML 时,没有任何反应。当我单击“设置事件”链接时,类已更改,但指令没有向我显示警报。 (这是为什么?)。如果我随后再次更改类,指令会向我显示警报。

那么,为什么在第一次点击时没有触发指令的警报?

我创建了一个 plunker以便更好地理解。

希望有人能告诉我这有什么问题,因为它确实妨碍了我的工作。

最佳答案

您可以,但您不需要使用指令 来使这项工作顺利进行。您可以使用 ng-style 或仅使用 $scope,如下例所示。这Demo向您展示了通过使用 directives 在 AngularJS 中实现“切换”是多么容易。

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

OfficeUIRibbon.directive('officeActiveStyle', function () {
return {
restrict: 'A',
link: function (scope, element, attr) {
scope.$watch(function() {
officeUiRibbonActiveHexColor = '#f700ff';
});
}
};
});

/**
* CSS Hex color holder
* @type {string}
* @global
*/
var officeUiRibbonActiveHexColor = '#ff0000';

/**
* Active holder
* @type {boolean}
* @global
*/
var officeUiRibbonActiveToggle = false;

// Defines the AngularJS 'OfficeUIRibbon' controller.
OfficeUIRibbon.controller('OfficeUIRibbon', ['$scope', '$http', '$animate', function($scope, $http, $animate) {


$scope.toggle = function () {
officeUiRibbonActiveToggle = officeUiRibbonActiveToggle ? false : true; //switch active state
}

$scope.getStyles = function () {
if (officeUiRibbonActiveToggle) {
return officeUiRibbonActiveHexColor;
}
}
}]);

HTML 模板:

<!DOCTYPE html>
<html ng-app="OfficeUIRibbon">

<head>
<script src="https://code.angularjs.org/1.3.10/angular.js"></script>
<script src="script.js"></script>
</head>

<body ng-controller="OfficeUIRibbon">
<div
office-active-style=""
style="height: 200px; border: 1px solid black; background-color: {{ getStyles(); }}">Dit is een demo</div>

<a href="#" ng-click="toggle()">Toggle</a>
</body>

</html>

解决方案2

可选:这是另一个Demo .这个演示向您展示了在不使用 directives 的情况下在 angularjs 中实现“切换”是多么容易。

var OfficeUIRibbon = angular.module('OfficeUIRibbon', [])

OfficeUIRibbon.controller('OfficeUIRibbon', ['$scope', '$http', '$animate', function($scope, $http, $animate) {

/**
* Active state holder
* @type {boolean}
*/
var active = false;

/**
* Holds css color hex code
* @type {string}
*/
var color = '#ff0000';

/**
* Check active scope
*/
$scope.toggleShow = function () {
active = !active; //switch true false in the coolest way ;)
}

/**
* Check active scope
*/
$scope.giveColor = function () {
if (active) {
return color;
}
}
}]);

您的 HTML 模板:

<!DOCTYPE html>
<html ng-app="OfficeUIRibbon">

<head>
<script src="https://code.angularjs.org/1.3.10/angular.js"></script>
<script src="script.js"></script>
</head>

<body ng-controller="OfficeUIRibbon">
<div office-active-style=""
style="height: 200px; border: 1px solid black; background-color: {{ giveColor() }}">Dit is een demo</div>

<a href="#" ng-click="toggleShow()">Toggle</a>
</body>

</html>

关于javascript - AngularJS:当 css 类发生变化时如何通过切换更改颜色属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28138008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com