javascript - 在 AngularJS 中将函数从 Controller 移动到服务

标签 javascript html angularjs function

我的 Controller 中有以下内容:

    $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')}}

我想将该函数移至服务中,以便在其他 Controller 上重用这段代码。

我将该函数移至 Controller 中,并将 $scope.getParameterByName 重命名为 this.getParameterByName

我确保将模块和服务注入(inject)到我的 Controller 中。

在我的 Controller 中我添加了以下代码:

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

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

console.log(结果[1]);

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

最佳答案

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

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

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

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

关于javascript - 在 AngularJS 中将函数从 Controller 移动到服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098484/

相关文章:

javascript - 为什么我在以下 JavaScript 代码中收到 XMLHTTPRequest 错误?

javascript - Solidity 事件未被调用

javascript - 使用 Knockout 映射插件使用非规范化数据

javascript - ng-click 不适用于 <li> 元素

html - 将 HTML 内容添加到 Angular Material $mdDialog

javascript - Angular 过滤器不起作用

javascript - 替换 JavaScript 对象中的值中的字符串

javascript - 将socket.io客户端指向heroku服务

javascript - 使用 javascript 创建按钮并将其附加到动态 html 表格中每行的末尾

jquery - 使用 jQuery 仅在 div 中包装前 3 个元素