为什么Object.attribute未定义?

时间:2014-02-26 16:30:29

标签: javascript angularjs

我是Javascript的新手。我有两个模型UnitSite

Unit有很多Sites,这就是我从视图中传递它们的方式:

<a href="#" ng-click="destroyUnit(unit.id, unit.sites)" ></a>

这是我的angularJS控制器中的功能:

$scope.destroyUnit = function(unit_id, sites){
  console.log(unit_id)
  $scope.$emit("units.delete", unit_id, sites);
}

$scope.$on("units.delete", function(e, unit_id, sites){     
  console.log("unit_id: "+unit_id+", site_length: "+sites.length+", site_id "+sites[0].id);
});

这是我得到的输出:

unit_id: 439, site_length: 2, site_id undefined 

我只是想知道为什么site_idundefined?我怎么才能得到它? TNX。

更新

为了更好的解释;我只想从sites删除unit;在这种情况下,site.id=443

enter image description here

更新

我已经尝试了sites[0][0].id,但我得到了:

TypeError: Cannot read property '0' of undefined

2 个答案:

答案 0 :(得分:0)

从截图中可以清楚地看出sites是一个长度为2的数组。

enter image description here

sites是一个分配为

的数组变量
sites = [
         [{article: null, clip: {....}, id: 443}],
         [{...................}]
        ]

sites中的每个项目都是一个数组,所以你必须这样做

sites[0][0].id

答案 1 :(得分:0)

您必须删除代码中的冗余array wrap

现在:

sites[0] // [{id: 443, ...}]

因此,您只能使用

访问ID
sites[0][0].id // 443

现在格式化:

sites: [[{article: null, clip: {....}, id: 443}], {}],
unit_id: 45

格式正确:

sites: [{article: null, clip: {....}, id: 443}, {}],
unit_id: 45