Angular不保存$ scope。$ watch order

时间:2016-02-18 09:04:09

标签: javascript angularjs

我有一个代码负责在我的控制器中订购元素。 这是代码:

var n = new Date($scope.start);
var month = n.getMonth();

当我$scope.$watch('applications', function (applications) { if (angular.isArray(applications) && applications.length !== 0) { var landing_app = _.findWhere(applications, { area_name : $scope.landingAreaName }); applications = _.reject(applications, function(app){ return app.id == landing_app.id; }); applications.unshift(landing_app); } }); console.log变量时 - 它具有正确的元素顺序。但它没有在视图中保留。这有什么不对?

更新

当我使用此代码时:

applications

它确实改变了应用程序的顺序,但它不是我想要的顺序。

1 个答案:

答案 0 :(得分:0)

问题在于JS中的变量是按值而不是引用传递的 - 因此您对application的分配只是本地的:

var x = 3;
(function (x) {
  x++; // x = 4
}(x));
// here, back to x = 3

所以,这就是“点的规则”来自角度的地方:

var obj = {x: 3};
(function (obj) {
  obj.x++; // obj.x = 4
}(obj));
// obj.x is still 4 here, because obj's **contents** weren't copied.

在这种情况下,最简单的解决方案是修改$scope

$scope.applications = _.reject(...);

注意:任何破坏性操作都会起作用(如unshift),因为它会对内容起作用。