有人能解释一下这段代码中发生了什么吗?我了解link
函数是在compile
之后执行的。
link vs compile.js
是:
var app = angular.module('myApp', []);
app.directive('highlight', function () {
return {
restrict: 'A',
compile: function ($element, $attr, $transclude) {
console.log('executed highlight');
$element.addClass("highlight");
//$element.addClass("red");
}
};
});
app.directive('red', function () {
return {
restrict: 'A',
link: function ($scope, $element, $attr) {
console.log('executed red');
$element.addClass("red");
//$element.addClass("highlight");
}
};
});
link vs compile.html
是:
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="js/angular.js" type="text/javascript"></script>
<script src="js/link vs compile.js" type="text/javascript"></script>
<style type="text/css">
.highlight{
background:yellow;
}
.red{
background: red;
}
</style>
</head>
<body>
<div ng-repeat="word in ['abc','def','ghi']" red highlight >
{{word}}
</div>
</body>
</html>
由于上述原因,div
出现红色背景颜色,因为link
稍后执行,因此可能覆盖了效果compile
功能。但是,当我将link vs compile.js
更改为此格式时:
var app = angular.module('myApp', []);
app.directive('highlight', function () {
return {
restrict: 'A',
compile: function ($element, $attr, $transclude) {
console.log('executed highlight');
//$element.addClass("highlight");
$element.addClass("red");
}
};
});
app.directive('red', function () {
return {
restrict: 'A',
link: function ($scope, $element, $attr) {
console.log('executed red');
//$element.addClass("red");
$element.addClass("highlight");
}
};
});
现在div
背景为red
,为什么?如果稍后执行link
功能,div
不应该yellow
颜色?
答案 0 :(得分:1)
没有关于angularjs link
或compile
的内容,这与css
类似
<div class="highlight red">my div</div>
如果更改班级的顺序
,将不会发生任何事情<div class="red highlight">my div</div>
答案 1 :(得分:0)
它甚至不是Angular
相关问题,而是css
相关问题。
在red
中写入的highlight
和style tag
类的顺序是有所作为的。
<style type="text/css">
.highlight{
background:yellow;
}
.red{
background: red;
}
</style>
如果上面的内容改为:
<style type="text/css">
.red{
background: red;
}
.highlight{
background:yellow;
}
</style>
然后div转为yellow
。
答案 2 :(得分:0)
你需要删除其他类,因为你已经添加了两个类,所以会得到不可预见的结果。这将解决问题:
var app = angular.module('myApp', []);
app.directive('highlight', function () {
return {
restrict: 'A',
compile: function ($element, $attr, $transclude) {
console.log('executed highlight');
$element.removeClass("highlight");
$element.addClass("red");
}
};
});
app.directive('red', function () {
return {
restrict: 'A',
link: function ($scope, $element, $attr) {
console.log('executed red');
$element.removeClass("red");
$element.addClass("highlight");
}
};
});