AngularJS $route Params 未定义,但 属性 存在

AngularJS $routeParams is undefiend, but property is there

angular.module("newsApp",["ngRoute"])
.config($routeProvider=>{
    $routeProvider.when("/edit",{
        templateUrl : "views/addNewsView.html"
    });
    $routeProvider.when("/newsList",{
        templateUrl : "views/newsList.html"
    });
    $routeProvider.when("/singleNews/:newsId",{
        templateUrl : "views/singleNews.html"
    });
    $routeProvider.when("/",{
        templateUrl : "views/newsList.html"
    });
    $routeProvider.otherwise({
        redirectTo:"/newsList"
    });
})

这是我的模块和配置。我有简单的应用程序。我想添加功能,当用户为 示例输入 url 时。com/singleNews/2 - 它打开 ID 为 - 2

的新闻
.controller("newsAppCtrl",['$scope','$location','$routeParams',($scope, $location, $routeParams)=>{

    console.log($routeParams); //empty object

    setTimeout(function () {
        console.log($routeParams); //in this case property is there
    },100);

所以当我输入 url

example.com/singleNews/2

routeParams 是空对象,虽然当我在 chrome 控制台中单击那个空对象时 属性 在那里并且它说 "value below was evaluated just now " 但是当我将该控制台添加到 TimeOut 时,它可以工作并且 属性 就在那里。我知道在 angularjs 中不推荐使用 setTimeOut(),因此使用 $timeout 解决了问题,但我想了解问题所在。

您应该在控制台中收到错误消息:

Function.prototype.bind.apply(...) is not a constructor

简单地避免使用 (...)=>{...} 语法,因为 AngularJS 试图用 new method() 语法调用一个函数,但使用箭头符号失败了。

.config($routeProvider=>{...} 切换为 .config(function($routeProvider){...}(以及其他类似情况)。

箭头符号仍然可以使用,并且对 $http 调用很有用,例如:

$http.get(url).then( (res)=>{...} );