AngularJS 组件中 $apply 的替代方法是什么

What is the alternative of $apply in AngularJS Component

当我从项目列表中删除项目时。在浏览器上刷新需要时间。我找不到 $apply() 的任何替代方法。组件外部调用组件对象时的回调函数

import template from './itemListItems.html';

export const name = 'itemListItems';
export const itemListItems = {
    template,
    bindings: {
        listItems: '<',
        addNewItem: '&',
        editItem: '&',
    },
    controller: class ItemListItemsController {
        // @ngInject
        constructor(page) {
            this.page = page;
        }
        removeItem(indx) {
            var func = function (button) {
                if (button === 1) {
                    this.listItems.splice(indx, 1);// After removing itemlist, 
it takes few seconds to refresh on browser.                
                  }
            };
            navigator.notification.confirm(
                'Are you sure you want to remove this item?',
                func.bind(this),
                'Confirm Delete',
                ['Confirm', 'Cancel']
            );
        }
    }
};

我在这行有问题。 this.listItems.splice(index, 1); 删除项目列表后,需要几秒钟才能在浏览器上刷新。以前在 directove 模式下,我使用的是 $scope.$apply()。但是在组件中,$apply 不再可用。请问有什么解决办法吗?

无需刷新页面。 如果您已经在 parent 组件中初始化数组,它应该会自动更新,因为数组是引用类型。

更好的方法是使用“&”绑定,例如您的 'addNewItem' 和 'editItem'。

它应该是这样的:

export const itemListItems = {
    template,
    bindings: {
        listItems: '<',
        addNewItem: '&',
        editItem: '&',
        onRemove:'&',
    },
    controller: class ItemListItemsController {
        // @ngInject
        constructor(page) {
            this.page = page;
        }
        removeItem(indx) {
            var func = function (button) {
                if (button === 1) {
                    this.listItems.splice(indx, 1);
                    this.onRemove(indx);

                  }
            };
            navigator.notification.confirm(
                'Are you sure you want to remove this item?',
                func.bind(this),
                'Confirm Delete',
                ['Confirm', 'Cancel']
            );
        }
    }
};

Parent- HTML:

<item-list-items list-items="yourlist" on-remove="removeFromList($event)"></item-list-items>

Parent-controller js:

//...
$scope.removeFromList = function (index) {
    $scope.yourlist.splice(index, 1)
}
//...