javascript - 如何以现有服务的 Angular 创建工厂

标签 javascript jquery angularjs service factory

我正在学习 angularjs 并阅读有关服务和工厂的文章。此 ARTICLE 提供了一个示例这是Service Fiddle吗.

在阅读本文时,我正在尝试将服务转换为工厂,这是指向 My Factory Fiddle 的链接.但它仍然没有按预期工作我不确定我做错了什么。

HTML

  <div ng-app="app">
      <div ng-controller="CalculatorController">
          Enter a number:
          <input type="number" ng-model="number" />
          <button ng-click="doSquare()">X<sup>2</sup></button>
          <button ng-click="doCube()">X<sup>3</sup></button>

          <div>Answer: {{answer}}</div>
      </div>
  </div>

JS

    var app = angular.module('app', []);

    app.factory('MathService', function() {
    var myFactory = {};
        myFactory.add = function(a, b) { return a + b };

        myFactory.subtract = function(a, b) { return a - b };

        myFactory.multiply = function(a, b) { return a * b };

        myFactory.divide = function(a, b) { return a / b };

        retutn myFactory;
    });

    app.factory('CalculatorService', function(MathService){
        var calcFactory = {};
        calcFactory.square = function(a) { return MathService.multiply(a,a); };
        calcFactory.cube = function(a) { return MathService.myFactory.multiply(a, MathService.myFactory.multiply(a,a)); };

        return calcFactory;

    });

    app.controller('CalculatorController', function($scope, CalculatorService) {

        $scope.doSquare = function() {
            $scope.answer = CalculatorService.calcFactory.square($scope.number);
        }

        $scope.doCube = function() {
            $scope.answer = CalculatorService.calcFactory.cube($scope.number);
        }
    });

最佳答案

出于某种原因,你提示它无法实例化“app”模块,所以一切都失败了。

无论如何,这是一个工作示例的 fiddle :https://jsfiddle.net/gom2q6bz/1/ .

请注意,您不需要调用 CalculatorService.calcFactory.cube 而是调用 CalculatorService.cube;

var app = angular.module('app', []);

app.factory('MathService', function() {
  var service = {};
  service.add = function(a, b) {
    return a + b
  };

  service.subtract = function(a, b) {
    return a - b
  };

  service.multiply = function(a, b) {
    return a * b
  };

  service.divide = function(a, b) {
    return a / b
  };

  return service;
});

app.factory('CalculatorService', function(MathService) {
  var service = {};
  service.square = function(a) {
    return MathService.multiply(a, a);
  };
  service.cube = function(a) {
    return MathService.multiply(a, MathService.multiply(a, a));
  };

  return service;

});

app.controller('CalculatorController', function($scope, CalculatorService) {

  $scope.doSquare = function() {
    $scope.answer = CalculatorService.square($scope.number);
  }

  $scope.doCube = function() {
    $scope.answer = CalculatorService.cube($scope.number);
  }
});

关于javascript - 如何以现有服务的 Angular 创建工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39638006/

相关文章:

javascript - 如何在jquery中的if else条件中使字段成为必填字段

javascript - 使用 Jquery 订购附加类

javascript - 正则表达式不匹配内容,而是匹配整个搜索字符串

angularjs - 带参数的 Angular 转换

变量设置为 X 时的 Javascript 回调

Javascript 复选框函数 : "missing : after property id"

javascript - 通过 ajax 加载的图像的 JQuery 警报 src。未定义的错误

javascript - javaScript中模块关闭之前和模块关闭之后 '()'或 '(otherModule)'之间的区别

javascript - 使用 JavaScript 在 <li> 内的 <Input> 元素后面附加文本

javascript - 无法使用 Angular.js 动态设置值