Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.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 Angularjs指令包装重复_Javascript_Jquery_Angularjs - Fatal编程技术网

Javascript Angularjs指令包装重复

Javascript Angularjs指令包装重复,javascript,jquery,angularjs,Javascript,Jquery,Angularjs,这里有个Angularjs新手 我正在尝试在Angularjs应用程序中使用 这是你的电话号码 Justified gallery是一个jquery插件,因此我创建了一个指令来调用它: app.directive('justified', function () { return { restrict: 'AE', link: function (scope, el, attrs) { $(el).justifiedGallery(

这里有个Angularjs新手

我正在尝试在Angularjs应用程序中使用

这是你的电话号码

Justified gallery是一个jquery插件,因此我创建了一个指令来调用它:

app.directive('justified', function () {
    return {
        restrict: 'AE',
        link: function (scope, el, attrs) {
            $(el).justifiedGallery();
        }
    };
});
事实上,它可以很好地处理静态定义的内容(比如fiddle中html的注释部分)。但一旦我尝试将其与ng repeat一起使用,如下所示:

   <div justified id="justified"> 
        <a ng-repeat="dir in dirs" ng-href="/#/dir/{{dir.id}}">
          <img ng-src="{{dir.first_image}}" alt="{{dir.name}}"/>
        </a>
    </div justified>

什么都不会发生,什么都不会被渲染。我相信这与ng repeat中的范围有关,但我无法找到解决问题的正确方法

谁能告诉我,我犯的错误在哪里

非常感谢。

:


您可以使用自定义指令来确定重复渲染何时完成,例如,从以下位置

我已经更新了你的小提琴:

编辑

我必须添加一个$timeout,以便angular可以在调用gallery函数之前更新html。

您可以使用自定义指令来确定何时完成重复渲染,例如从这个

我已经更新了你的小提琴:

编辑


我必须添加$timeout,以便angular可以在调用gallery函数之前更新html。

似乎需要在ng repeat完成渲染元素之前验证gallery的启动。谢谢,我已经考虑过了,并尝试手动设置指令优先级-ng repeat的优先级为1000,因此我将验证设置为较低的值,但这没用。顺便说一句,我修改了($timeout($(el).justizedGallery());而不是$timeout($(el).justizedGallery);),但不幸的是没有用。我认为,如果将
justized
ng repeat
附加到同一个元素,它会有所帮助。$timeout接受一个函数并在超时后执行(在本例中为0)。如果执行
$timeout($(el).justizedGallery())
–您立即执行
justizedGallery
,并将其返回值传递给$timeout-没有任何用处。感谢您的解释-这很有意义,而且我必须承认我还没有阅读$timeout的文档。似乎它在ng repeat完成渲染元素之前启动了justizedGallery。谢谢,我已经考虑过了,并尝试手动设置指令优先级-ng repeat的优先级为1000,所以我将justify设置为较低的值,但没有帮助。顺便说一句,我修改了($timeout($(el).justizedGallery());而不是$timeout($(el).justizedGallery);),但不幸的是没有用。我认为,如果将
justized
ng repeat
附加到同一个元素,它会有所帮助。$timeout接受一个函数并在超时后执行(在本例中为0)。如果执行
$timeout($(el).justizedGallery())
–您立即执行
justizedGallery
,并将其返回值传递给$timeout-这没有用。感谢您的解释-这很有意义,我必须承认我还没有阅读$timeout的文档。非常感谢!但有一个问题——传递给$watch的函数中的n和o参数是什么?@mkowalik——函数从Angular获取两个参数——新值和旧值。我们想在新值为真时设置画廊。有道理吗?绝对有道理。谢谢。我也遇到了同样的问题,这个解决方案确实很有帮助。既然你正在操作,为什么你不应该用“if(scope.$last)”来保护这个保护呢?非常感谢!但有一个问题——传递给$watch的函数中的n和o参数是什么?@mkowalik——函数从Angular获取两个参数——新值和旧值。我们想在新值为真时设置画廊。有道理吗?绝对有道理。谢谢。我也遇到了同样的问题,而且这个解决方案确实有帮助。既然您正在操作,为什么您不应该用“if(scope.$last)”来保护这个保护呢?
app.directive('justified', function ($timeout) {
    return {
        restrict: 'AE',
        link: function (scope, el, attrs) {
            $timeout($(el).justifiedGallery);
        }
    };
});
app.directive('repeatDone', [function () {
  return {
    restrict: 'A',
     link: function (scope, element, iAttrs) {
          var parentScope = element.parent().scope();
          if (scope.$last){
               parentScope.$last = true;           
          }
        }
      };
    }]);