AngularJS 1.5组件模板完全渲染后触发功能
AngularJS 1.5 component Trigger function after template fully rendered
我正在使用 Angular 的 1.5 组件。
基本上我需要在模板完全渲染后触发一个函数。
Components layout
所有这些组件都在一个父组件中。
组件 1 有一个 ng-repeat 内部填充了卡片,但我需要将组件 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
}
}
}
因此您需要将 vm.resizeHeights 传递给您的子组件
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 布局来处理这个问题(angular-material 更容易)。
如果你坚持要在javascript中进行高度校正,那么我会制作第三个组件,同时包含组件 1 和组件 2。
然后在新组件的$postLink函数中,可以使用$element获取子元素,并调整高度。
也许您需要不同的方法?
我的意思是如果你的父组件中已经有所有的数据,并且你不能在ng-repeat结束后触发resizeHeight
<div class="container></div>
还有一些 css flexboxes
.container {
display: flex;
flex-wrap: wrap;
}
这使得所有 div 高度相等
但也有一些不好的解决方法,例如:
在父组件中
setTimeout(function(){
//Do resize
scope.$apply();
}, 0)
我还记得那件事:
在你重复的 childComponent 中你可以访问
if (scope.$last){
// do resize
}
我正在使用 Angular 的 1.5 组件。
基本上我需要在模板完全渲染后触发一个函数。
Components layout
所有这些组件都在一个父组件中。 组件 1 有一个 ng-repeat 内部填充了卡片,但我需要将组件 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
}
}
}
因此您需要将 vm.resizeHeights 传递给您的子组件
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 布局来处理这个问题(angular-material 更容易)。
如果你坚持要在javascript中进行高度校正,那么我会制作第三个组件,同时包含组件 1 和组件 2。 然后在新组件的$postLink函数中,可以使用$element获取子元素,并调整高度。
也许您需要不同的方法?
我的意思是如果你的父组件中已经有所有的数据,并且你不能在ng-repeat结束后触发resizeHeight
<div class="container></div>
还有一些 css flexboxes
.container {
display: flex;
flex-wrap: wrap;
}
这使得所有 div 高度相等
但也有一些不好的解决方法,例如:
在父组件中
setTimeout(function(){
//Do resize
scope.$apply();
}, 0)
我还记得那件事:
在你重复的 childComponent 中你可以访问
if (scope.$last){
// do resize
}