【问题标题】:Rendering Order of Angular Directives with templateURL使用 templateURL 渲染 Angular 指令的顺序
【发布时间】:2016-02-17 18:25:44
【问题描述】:

我有以下场景,简化为jsFiddle

我正在尝试在父向导元素中运行一些代码,呈现其中的所有步骤之后。在这种情况下,会按应有的方式生成控制台日志: 1. 第一步。 2. 第二步。 3. 向导。

但是,当我将任何步骤的模板更改为具有实际 HTML 的 templateURL 时,顺序会变得混乱,我无法找到确保向导中的功能最后运行的方法。

我已经在向导指令中尝试过这个概念,但它仍然不适合我。

$timeout(function () {
    //DOM has finished rendering
});

对此有已知的解决方案吗?

【问题讨论】:

  • 不清楚订单有什么问题。 Works fine here。尝试更新并分叉此演示以复制您的问题
  • 另外...你到底想做什么?
  • 一般来说,我试图通过运行 $("#wizard").steps(); 来初始化这个 JQuery 插件 (github.com/rstaib/jquery-steps); (需要在呈现所有内容后运行)。事情是。如果我在向导的链接功能上运行它,它会在呈现其余步骤之前运行。因此无法正确初始化。
  • 在您的示例中,您可以看到向导日志是如何在其余步骤之前写入控制台的,而我需要它在所有步骤都已呈现之后运行 LAST。
  • 怎么办?你还没有提到你的主要目标是什么

标签: javascript jquery angularjs angularjs-directive


【解决方案1】:

我用答案做了一个 jsfiddle。 http://jsfiddle.net/KyEr3/1746/ 但是,我不明白您为什么需要这样做。基本上,您可以让服务跟踪初始化计数以确保两个指令都已初始化。观察这个跟踪器的值,并在它发生变化时对其进行测试。卡赞。

由于服务是单例且持久的,您可能希望在向导指令初始化时将计数重置为零。

代码如下:

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

myApp.service("initState", function(){
return{
    initCount:0,
  finishStep:function(){
    this.initCount++;
  }
}

});

myApp.directive("wizard",function(initState){
    return {
    link: function($scope){
        $scope.$watch(function(){
        return initState.initCount;
      }, function(){
      console.log('init count', initState.initCount );
        if( initState.initCount === 2){
            console.log('link on wizard');
        }
      })

    },
        restrict: "E",
        template: "<step-1></step-1><step-2></step-2>"
    }
});

myApp.directive("step1", function(initState){
    return {
    link: function(){
        console.log('link on step1');
      initState.finishStep();
    },
        restrict: "E",
        template: "<h1>Step1</h1>"
    }
});

myApp.directive("step2", function(initState){
    return {
    link: function(){
        console.log('link on step2');
       initState.finishStep();
    },
        restrict: "E",
        template: "<h1>Step2</h1>"
    }
});

【讨论】:

  • 这行得通,但我对这种方法有疑问。由于我的步骤数可能会改变,有些可能会在以后添加,有些可能会删除。我不想为此管理 initCount 数(在本例中为“2”)。我希望根据呈现的步骤数自动管理它。
  • 真相是,你可能做错了。不管你在做什么(你还没有解释)。
  • 话虽如此,您可以存储一个由每个指令的名称或其他名称调用的布尔值,并在指令运行时将其设置为 true ......但是依赖跨指令初始化是一种解决方法可能有不同解决方案的问题。
猜你喜欢
  • 1970-01-01
  • 2013-04-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
  • 2017-05-13
  • 2015-07-05
  • 1970-01-01
相关资源
最近更新 更多