Javascript 模板完全渲染后AngularJS 1.5组件触发功能
我使用的是Angular的1.5组件 基本上,我需要在模板完全呈现后触发一个函数 所有这些组件都位于父组件内。 组件1内部有一个ng重复,用卡片填充,但我需要将组件2的高度设置为组件1的高度 组件1包含动态数据,所以它可以长一点或短一点,我没有找到任何智能的方法来检索组件1的完整高度 编辑: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
在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高度仍未完全初始化。