【问题标题】:Backport of `.merge()` for Angular 1.3.xAngular 1.3.x 的 .merge() 向后移植
【发布时间】:2015-08-08 00:47:18
【问题描述】:

Angular 1.4(还不稳定)有一个我感兴趣的功能:.merge()

因为我不想使用不稳定的库,所以我正在寻找一种替代 Angular 1.3.x 的方法。我的项目中是否可以包含任何“反向移植”库来模仿 Angular 的 .merge()

【问题讨论】:

  • @Satpal 你能再扩展一点吗?

标签: javascript angularjs merge


【解决方案1】:

看看实际的代码,它有很好的文档记录,你应该可以自己模仿它https://code.angularjs.org/1.4.0-rc.2/angular.js

第 459 行

合并功能:

function merge(dst) {
    return baseExtend(dst, slice.call(arguments, 1), true);
}

其中使用了baseExtend函数

function baseExtend(dst, objs, deep) {
    var h = dst.$$hashKey;

    for (var i = 0, ii = objs.length; i < ii; ++i) {
        var obj = objs[i];
        if (!isObject(obj) && !isFunction(obj)) continue;
        var keys = Object.keys(obj);
        for (var j = 0, jj = keys.length; j < jj; j++) {
            var key = keys[j];
            var src = obj[key];

            if (deep && isObject(src)) {
                if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {};
                baseExtend(dst[key], [src], true);
            } else {
                dst[key] = src;
            }
        }
    }

    setHashKey(dst, h);
    return dst;
}

什么用途

function setHashKey(obj, h) {
    if (h) {
        obj.$$hashKey = h;
    } else {
        delete obj.$$hashKey;
    }
}

用 angular 版本替换 baseExtend 中缺少的函数(即 angular.isObject 替换为 isObject 等)

【讨论】:

  • 我想过这个问题,但我遇到了slice.call 的问题,我不太确定它是什么/在哪里定义的。对那个有任何想法吗?
  • 你搜索过文件吗?第 244 行:切片 = [].slice,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多