javascript - 当对象传递回 Controller 函数时,AngularJS 正在删除我的 $_parent 属性

标签 javascript angularjs internet-explorer-8

我有一个 JavaScript 对象的链接列表,我想从中生成面包屑。

因为我在递归指令中使用列表,所以我需要使用 $_prev 和 $_next (而不是 prev 和 next),这样我就不会收到有关循环引用的 JSON.parse 错误。

var myapp = angular.module('myApp', []);

var data00 = { id: 0, label: 'label_0' }
var data01 = { id: 1, label: 'label_1' }
var data02 = { id: 2, label: 'label_2' }

data00.$_next = data01;
data01.$_next = data02;

data01.$_prev = data00;
data02.$_prev = data01;

myapp.controller('testController', function($scope){
    $scope.data = data02;
    $scope.getBreadCrumbs = function(branch){
        var crumbs = branch.label;
        while(branch.$_prev){
            branch = branch.$_prev;
            crumbs = branch.label + ' \\ ' + crumbs;
        }
        return crumbs;
    }
});

jsFiddle

在 Chrome 中一切正常,但在 IE8 中 getBreadCrumbs 函数 $_prev 属性不存在。

任何关于如何调试问题的意见将不胜感激。

最佳答案

我不确定你的 IE8 问题,但恕我直言,你的方法不是很好。我相信,通过使用更好的方法,您将减少 future 的开发/维护,并且很可能消除 IE8 的错误。我要做的就是把你所有的 dataxx对象放入单个数组,然后使用函数或 Angular Directive(指令)从该数组创建面包屑。

我强烈劝阻你不要做这样的事情

data00.$_next = data01;
data01.$_next = data02;

data01.$_prev = data00;
data02.$_prev = data01;

因为当您添加更多数据点时,不必要的工作就会增多。您可以使用数组的长度来查看您是否位于第一个/最后一个面包屑上,或者使用 $first $last Angular 为您提供的属性 ng-repeat

关于javascript - 当对象传递回 Controller 函数时,AngularJS 正在删除我的 $_parent 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22458469/

相关文章:

javascript - 识别 Javascript 中的网络错误

javascript - 如何使用 Promise 和 Angular 实现 Ajax 调用?

javascript - IE7 和 IE8 随机无法加载外部脚本

JavaScript 在 IE8 和 IE9 上崩溃-CompabilityMode : SCRIPT601: Unknown runtime error

javascript - 在 angularJS 项目中编写验证方法的最佳实践

javascript - 为什么 clientX 和 Y 在滚动时会发生变化?

javascript - simpleCart js格式化购物车

javascript - AngularJS:如何随机/合并来自不同 ng-repeat 的内容

javascript - 新页面组件上的 ionic radio 组

javascript - 使 d3.js 兼容 IE8/IE9