Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自定义指令';在应答ng repeat之前调用s link函数_Javascript_Angularjs_Angularjs Ng Repeat_Angular Directive_Angular Directive Link - Fatal编程技术网

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方法:)但我很高兴看到我没有做错什么。干杯,看起来不错。大学教师;我不知道为什么!!谢谢你的回答:)我认为这是一个比公认的答案更好的答案