Javascript 模板完全渲染后AngularJS 1.5组件触发功能

Javascript 模板完全渲染后AngularJS 1.5组件触发功能,javascript,angularjs,angular-components,Javascript,Angularjs,Angular Components,我使用的是Angular的1.5组件 基本上,我需要在模板完全呈现后触发一个函数 所有这些组件都位于父组件内。 组件1内部有一个ng重复,用卡片填充,但我需要将组件2的高度设置为组件1的高度 组件1包含动态数据,所以它可以长一点或短一点,我没有找到任何智能的方法来检索组件1的完整高度 编辑: 在COMP 1中,数据已经由父组件加载,我在一步一步填充组件的ng repeat中遇到问题。我认为您应该在父组件中具有state属性,并从子组件更新它 function ParentComponentCo

我使用的是Angular的1.5组件

基本上,我需要在模板完全呈现后触发一个函数

所有这些组件都位于父组件内。 组件1内部有一个ng重复,用卡片填充,但我需要将组件2的高度设置为组件1的高度

组件1包含动态数据,所以它可以长一点或短一点,我没有找到任何智能的方法来检索组件1的完整高度

编辑:


在COMP 1中,数据已经由父组件加载,我在一步一步填充组件的ng repeat中遇到问题。

我认为您应该在父组件中具有state属性,并从子组件更新它

function ParentComponentController () {

    var vm = this;

    vm.readyStatus = {
      Component1: false,
      Component2: false,
      // etc
    }

    vm.checkReadyStatus = function(){

       var isReady = true;

       for(status in vm.readyStatus) {
          if(status == false) {
              isReady = false;
          }
       }

       return isReady;

    }

    vm.resizeHeights = function() {

       if(vm.checkReadyStatus()) {
           // do resize
       }
    }
}
ChildComponent1 = {
   bindings: {
      resizeHeights: '&',
      readyStatus: '='
   },
   controller: function() {

       var vm = this;

       doAsyncRequest().then(function(){
            vm.readyStatus = true; 
            vm.resizeHeights() // so if template is ready, we execute resize  
       })

   }
}
因此,您需要将vm.resizeHeights传递给您的子组件

function ParentComponentController () {

    var vm = this;

    vm.readyStatus = {
      Component1: false,
      Component2: false,
      // etc
    }

    vm.checkReadyStatus = function(){

       var isReady = true;

       for(status in vm.readyStatus) {
          if(status == false) {
              isReady = false;
          }
       }

       return isReady;

    }

    vm.resizeHeights = function() {

       if(vm.checkReadyStatus()) {
           // do resize
       }
    }
}
ChildComponent1 = {
   bindings: {
      resizeHeights: '&',
      readyStatus: '='
   },
   controller: function() {

       var vm = this;

       doAsyncRequest().then(function(){
            vm.readyStatus = true; 
            vm.resizeHeights() // so if template is ready, we execute resize  
       })

   }
}

我希望它能帮助

我认为最好的解决方案是在css中使用flexbox布局来处理这个问题(有角度的材质使它更容易)

如果您坚持使用javascript进行高度校正,那么我将创建第三个组件,它同时包含组件1和组件2。
然后在新组件的$postLink函数中,可以使用$element获取子元素,并调整高度

也许你需要不同的方法

我的意思是,如果父组件中已经有了所有数据,并且在ng重复结束后无法触发resizeHeight

<div class="container></div>
这使得所有的div高度相等

但也有一些不好的解决方法,如:

在parentComponent中

 setTimeout(function(){
   //Do resize

   scope.$apply();
 }, 0)
我还记得那件事:

在您可以访问的childComponent中

if (scope.$last){
  // do resize 
}

好啊但是我怎样才能触发状态变化呢?这是我的问题我更新了我的评论,请检查一下。或者你可以将就绪状态传递到
vm.resizeHeights({Component1:true})
并在resizeHeights函数库中更新状态我忘了添加一些重要信息。。。我已经在comp1中有数据了,我没有任何异步请求。。。但无论如何,当请求结束时,组件1高度仍未完全初始化。