Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angular不保存$scope.$watch订单_Javascript_Angularjs - Fatal编程技术网

Javascript Angular不保存$scope.$watch订单

Javascript Angular不保存$scope.$watch订单,javascript,angularjs,Javascript,Angularjs,我有一个代码,负责在控制器中对元素进行排序。 代码如下: $scope.$watch('applications', function (applications) { if (angular.isArray(applications) && applications.length !== 0) { var landing_app = _.findWhere(applications, { area_name : $scope.la

我有一个代码,负责在控制器中对元素进行排序。 代码如下:

$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);
    }
});
当I
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;
        });
    }
});

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

问题在于变量在JS中是按值传递的,而不是按引用传递的–因此您对
应用程序的赋值仅限于本地:

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
),因为它作用于内容。

您正在从外部范围重新分配
应用程序
变量,这种情况最有可能是
$scope。应用程序
应用程序
指向不同的对象。您能在snippet或JSFIDLE中提供一个最小的完整代码示例吗?请添加更多导致
$scope.application
更改的代码。这意味着,当我在代码中使用reject时,我创建了一个与$scope.applications无关的新对象。但是当我使用sort时,我修改了scope.applications,因为它引用了与applications变量相同的对象,对吗?事实上。您创建了一个新的局部变量,该变量与
$scope
:)中的变量无关。它有它的内容,如果你直接修改
应用程序[0]
,它会有不同(就像unshift一样),因为同样,内容没有被复制,非常感谢你的帮助。我忘记了应用程序不仅仅是一个数组,还是一个对象,能够通过.sort()函数修改scope.applications对我来说有点出乎意料。