我有一个非常简单的函数,在$location
更改时执行(见下文)。
问题是,在$location.path().split("/")
时,分配中["browser"]
的出现会返回$location.path() == "/browser"
,但直接在console.log
内运行会返回["", "browser"]
。如何合理地解释这种差异?
angular.module("blah", [])
.controller("navigation", function($scope, $location) {
var updatePage = function() {
var temp = $location.path().split("/");
console.log($location.path(), $location.path().split("/"), temp);
$scope.page = temp.splice(0,1)[0];
$scope.args = temp;
//console.log($scope.page);
};
$scope.changePage = function(path) {
if (path.match("^https?:")) {
window.location = path;
} else {
$location.path(path);
}
};
$scope.args = [];
$scope.$on("$locationChangeSuccess", function(event, data) {
updatePage();
});
updatePage();
});
答案 0 :(得分:1)
您可能会看到"问题"用这样的代码:
var temp = $location.path().split("/");
$scope.page = temp.splice(0,1)[0];
...
console.log($location.path(), $location.path().split("/"), temp);
在记录时,temp
已经 splice
d 。 splice
(与 slice
不同)也从原始数组中移除了元素。
<强>更新强>
另一个可能的原因是:
Firefox(与Chrome不同)在记录时不会记录对象的值,而是对象的引用(数组也是对象)。因此,对阵列的任何后续修改(例如拼接)也将影响记录的对象/阵列。
如果您改为记录JSON.stringify(temp)
,则应该会看到预期结果。