在AngularJS中将函数从Controller移动到Service

时间:2015-12-04 22:23:21

标签: javascript html angularjs function

我的控制器中有以下内容:

    $scope.getParameterByName = function (name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(location.search);
        return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    };

并在我的HTML中:

{{getParameterByName('test')}}

我想将该功能转移到一个服务中,以便在其他控制器上重用这段代码。

我将该功能移至控制器并将$scope.getParameterByName重命名为this.getParameterByName

我确保将模块和服务注入我的控制器。

在我的控制器中,我添加了以下代码:

$scope.getParameterByName = function (name) {
    newService.getParameterByName(name);
};

但是,现在我的HTML中的表达式不会呈现结果。如果我将以下内容添加到我的服务中:

console.log(results[1]);

它正在记录正确的结果。我在控制器/ HTML中缺少什么才能再次正确渲染表达式?

1 个答案:

答案 0 :(得分:1)

您错过了从方法中返回结果值。

$scope.getParameterByName = function (name) {
    return newService.getParameterByName(name);
};

更优雅的解决方案是将服务方法的引用绑定到范围变量

$scope.getParameterByName = newService.getParameterByName; //referenced service method