ng-track-by
Version:
trackBy and trackById directives which provide TrackByFunction to ngForTrackBy
16 lines • 3.33 kB
JavaScript
export function changeTrackBy(ngForOf, trackBy, property) {
ngForOf.ngForTrackBy = trackBy;
patch(ngForOf, trackBy, property);
}
function patch(ngForOf, trackBy, property) {
const differ = ngForOf._differ;
differ._trackByFn = trackBy;
const linkedRecordsMap = differ._linkedRecords.map;
differ.forEachItem((record) => {
const trackById = record.item[property];
linkedRecordsMap.set(trackById, linkedRecordsMap.get(record.trackById));
linkedRecordsMap.delete(record.trackById);
record.trackById = record.item[property];
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbmdlLXRyYWNrLWJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctdHJhY2stYnkvc3JjL2xpYi90b29scy9jaGFuZ2UtdHJhY2stYnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGFBQWEsQ0FDekIsT0FBMEIsRUFDMUIsT0FBNkIsRUFDN0IsUUFBZ0I7SUFFaEIsT0FBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7SUFFL0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7QUFDdEMsQ0FBQztBQWVELFNBQVMsS0FBSyxDQUNWLE9BQVksRUFDWixPQUE2QixFQUM3QixRQUFnQjtJQUVoQixNQUFNLE1BQU0sR0FBSSxPQUE0QixDQUFDLE9BQU8sQ0FBQztJQUVyRCxNQUFNLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQztJQUU1QixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO0lBRW5ELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUMxQixNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3hFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFekMsTUFBYyxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3RELENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yT2YgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XG5pbXBvcnQgeyBJdGVyYWJsZUNoYW5nZXMsIFRyYWNrQnlGdW5jdGlvbiB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGFuZ2VUcmFja0J5KFxuICAgIG5nRm9yT2Y6IE5nRm9yT2Y8YW55LCBhbnk+LFxuICAgIHRyYWNrQnk6IFRyYWNrQnlGdW5jdGlvbjxhbnk+LFxuICAgIHByb3BlcnR5OiBzdHJpbmcsXG4pOiB2b2lkIHtcbiAgICBuZ0Zvck9mLm5nRm9yVHJhY2tCeSA9IHRyYWNrQnk7XG5cbiAgICBwYXRjaChuZ0Zvck9mLCB0cmFja0J5LCBwcm9wZXJ0eSk7XG59XG5cbmludGVyZmFjZSBVbnByaXZhdGVOZ0Zvck9mIHtcbiAgICBfZGlmZmVyOiBVbnBpdmF0ZURlZmF1bHRJdGVyYWJsZURpZmZlcjtcbn1cblxuaW50ZXJmYWNlIFVucGl2YXRlRGVmYXVsdEl0ZXJhYmxlRGlmZmVyIHtcbiAgICBfbGlua2VkUmVjb3Jkczoge1xuICAgICAgICBtYXA6IE1hcDxhbnksIGFueT47XG4gICAgfTtcbiAgICBfdHJhY2tCeUZuOiBGdW5jdGlvbjtcblxuICAgIGZvckVhY2hJdGVtOiBJdGVyYWJsZUNoYW5nZXM8YW55PltcImZvckVhY2hJdGVtXCJdO1xufVxuXG5mdW5jdGlvbiBwYXRjaChcbiAgICBuZ0Zvck9mOiBhbnksXG4gICAgdHJhY2tCeTogVHJhY2tCeUZ1bmN0aW9uPGFueT4sXG4gICAgcHJvcGVydHk6IHN0cmluZyxcbik6IHZvaWQge1xuICAgIGNvbnN0IGRpZmZlciA9IChuZ0Zvck9mIGFzIFVucHJpdmF0ZU5nRm9yT2YpLl9kaWZmZXI7XG5cbiAgICBkaWZmZXIuX3RyYWNrQnlGbiA9IHRyYWNrQnk7XG5cbiAgICBjb25zdCBsaW5rZWRSZWNvcmRzTWFwID0gZGlmZmVyLl9saW5rZWRSZWNvcmRzLm1hcDtcblxuICAgIGRpZmZlci5mb3JFYWNoSXRlbSgocmVjb3JkKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyYWNrQnlJZCA9IHJlY29yZC5pdGVtW3Byb3BlcnR5XTtcblxuICAgICAgICBsaW5rZWRSZWNvcmRzTWFwLnNldCh0cmFja0J5SWQsIGxpbmtlZFJlY29yZHNNYXAuZ2V0KHJlY29yZC50cmFja0J5SWQpKTtcbiAgICAgICAgbGlua2VkUmVjb3Jkc01hcC5kZWxldGUocmVjb3JkLnRyYWNrQnlJZCk7XG5cbiAgICAgICAgKHJlY29yZCBhcyBhbnkpLnRyYWNrQnlJZCA9IHJlY29yZC5pdGVtW3Byb3BlcnR5XTtcbiAgICB9KTtcbn1cbiJdfQ==