我有一个代码负责在我的控制器中订购元素。 这是代码:
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
它确实改变了应用程序的顺序,但它不是我想要的顺序。
答案 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
),因为它会对内容起作用。