`$ location #search()`调用的第一个参数必须是字符串或对象

时间:2017-07-28 22:13:54

标签: angularjs asp.net-mvc angularjs-service angularjs-routing

我正在开发angularjs和MVC应用程序,我的应用程序工作正常,但我在控制台中出错。

  

错误:$ location:isrcharg

     

错误的$ location.search()参数类型

     

$location#search()调用的第一个参数必须是字符串或对象

这是我的angularjs导航服务:

 self.goBack = function () {
        $window.history.back();
    }

    self.navigateTo = function (path, params) {
        if (params === null) {
            $location.path(MyApp.rootPath + path);

        }
        else {

            $location.path(MyApp.rootPath + path).search(params);
        }

    };

    self.refreshPage = function (path) {
        $window.location.href = MyApp.rootPath + path;
    };

    self.clone = function (obj) {
        return JSON.parse(JSON.stringify(obj))
    };

    self.querystring = function (param) {
        if ($location.search !== null)
            return $location.search()[param];
        else
            return null;
    };

    self.resetQueryParams = function () {
        $location.url($location.path());
    };

    return this;
};

上面的代码是一个普通的工厂,所以在将它注入我的控制器之后,我将如何导航 内角我用viewModelHelper.navigateTo("/home"); 然后,如果我想导航到mvc页面我使用

 viewModelHelper.refreshPage("index");
即时导航到此代码时出现错误

$location.path(MyApp.rootPath + path).search(params);

1 个答案:

答案 0 :(得分:2)

  

我的参数没有定义。我如何解决这个未定义的问题

self.navigateTo = function (path, params) {
    if ( ̶p̶a̶r̶a̶m̶s̶ ̶=̶=̶=̶ ̶n̶u̶l̶l̶  !params) {
        $location.path(MyApp.rootPath + path);
    }
    else {
        $location.path(MyApp.rootPath + path).search(params);
    }
};

OR

self.navigateTo = function (path, params) {
    if (params) {
        $location.path(MyApp.rootPath + path).search(params);
    }
    else {
        $location.path(MyApp.rootPath + path);
    }
};

在上面的示例中,如果.search变量为truthy,代码将仅执行params方法。

在JavaScript中,truthy值是在布尔上下文中计算时被视为true的值。所有值均为truthy,除非它们被定义为falsy(即false0""null,{{1除外}和undefined)。

有关详细信息,请参阅MDN JavaScript Reference - truthy