Javascript 自定义指令';在应答ng repeat之前调用s link函数
我有以下指示:Javascript 自定义指令';在应答ng repeat之前调用s link函数,javascript,angularjs,angularjs-ng-repeat,angular-directive,angular-directive-link,Javascript,Angularjs,Angularjs Ng Repeat,Angular Directive,Angular Directive Link,我有以下指示: .directive("picSwitcher", ["$timeout", function($timeout){ return { restrict: "A", scope: { pics: "=", fadeTime: "@", timeForPic:"@" }, template: '<img ng-repeat="pic in pics" src="{{pic.url}}" style
.directive("picSwitcher", ["$timeout", function($timeout){
return {
restrict: "A",
scope: {
pics: "=",
fadeTime: "@",
timeForPic:"@"
},
template: '<img ng-repeat="pic in pics" src="{{pic.url}}" style="display: none"/>',
link: function ($scope, element){
//some code...
$(element.find("img")[0]).css({display: "block"});
}
};
}])
指令(“picSwitcher”[“$timeout”,函数($timeout){
返回{
限制:“A”,
范围:{
图片:“=”,
fadeTime:“@”,
时间形态:“@”
},
模板:“”,
链接:功能($scope,element){
//一些代码。。。
$(element.find(“img”)[0]).css({display:“block”});
}
};
}])
我的问题是,当我的link函数被调用时-ng repeat还没有“编译”(这里应该用什么词来代替编译?)
所以我试图设置未定义的css。。
ng repeat完成后,如何强制运行链接功能
现在我通过替换$(element.find(“img”)[0]).css({display:“block”})来解决这个问题带有$timeout的code>(函数(){
$(element.find(“img”)[0]).css({display:“block”});},200)代码>
但这让人感觉“不舒服”
为了更轻松地实现我的目标,我还缺少什么吗?
一般来说,在自定义指令的link函数中操作ng repeat dom元素的最佳方法是什么
谢谢,
Jimmy。您可以检查$scope.$evalAsync
$scope.$evalAsync(function(){
$(element.find("img")[0]).css({display: "block"});
}
这将使函数在dom呈现之后执行
另外,如果将延迟设置为0,那么使用$timeout也不是一个坏主意
$timeout(function(){
$(element.find("img")[0]).css({display: "block"});},
0);
我想这也会起作用
更多参考资料您可以使用JQLite的.ready()
函数
post: function postLink(scope, element) {
element.ready(function() {
//$(element.find("li")[0]).css({color: "red"});
element.find("li:first-child").css({color: "red"});
});
}
我还更改了在指令中选择元素的方式。因为您有可用的元素
,所以只需使用JQLite即可。但是,要更改css类,您应该在css文件中进行更改
在下面的代码片段中,我替换了
如果您将在html中而不是在directice中创建模板,它可能会工作?谢谢,根据您的参考,在我的情况下,最好使用$evalAsync方法:)但我很高兴看到我没有做错什么。干杯,看起来不错。大学教师;我不知道为什么!!谢谢你的回答:)我认为这是一个比公认的答案更好的答案