[AngularJS]角不保存 $scope.$watch 订单

发布时间: 2017/4/16 21:53:19
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有是负责我的控制器中的排序元素的代码。 下面是代码︰

$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 变量-它有正确的元素的顺序。但它不保留在视图中。这里是怎么了?

更新:

当我使用这段代码︰

$scope.$watch('applications', function (applications) {
    if (angular.isArray(applications) && applications.length !== 0) {
        applications.sort(function (a) {
            return a.area_name !== $scope.landingAreaName;
        });
    }
});

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

解决方法 1:

问题是通过值传递的变量,不引用,在 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 ),因为它的行为的内容。

赞助商