处理Angluarjs中没有准备好的绑定

时间:2017-08-25 16:22:24

标签: angularjs angularjs-components

我的组件我将对象作为绑定传递,

.component('selectionButton', {
    bindings: {
        parentForm : '<'
    },
    templateUrl: 'selection-button-component.html',
    controller: 'selectionButtonController',
    controllerAs: 'selBtnCtrl'
});

问题是当我的组件初始化时,我传递的对象尚未加载,所以在$ onChanges钩子中我做了这个:

vm.$onChanges = function(newObj){
    if(angular.isDefined(newObj.parentForm.currentValue)){
        vm.parentForm = newObj.parentForm.currentValue;
    }
};

在我的控制器中,我在一个函数中调用vm.parentForm,在我的页面完全加载后单击一个按钮时会触发该函数,但我总是将其作为undefined,即使我更改了它#39;使用$onChanges的值。

当我查看vm.$onChanges函数时,我可以看到vm.parentForm的值是changesObj.parentForm中的新值。

我该如何解决这个问题?

编辑:

我尝试用ng-if包装我的元素,如下所示:

<span ng-if="fullPage.posteForm">
            <selection-button parent-form="fullPage.posteForm" ></selection-button>
        </span>

但这没有用。我也尝试过双向绑定,但也不起作用。

1 个答案:

答案 0 :(得分:1)

当您将一个对象传递给一个组件时,它可能还没有准备就绪,因为您正在等待一个promise或另一个操作被解析,但是对象定义是未定义的。对于这种情况,您可以使用isFirstChange()。 这是一个说明此类案例JSFiddle example的工作示例。打开控制台,查看超时后绑定的更新时间。

注意:如果组件模板中使用的对象名称等于传递给组件的对象名称,则不需要创建新对象,它将在组件中更新并可用于模板。