通过Angular工厂的POST请求发送数据

时间:2015-12-17 04:11:55

标签: javascript angularjs

我在控制器中有这个

angular.module('myApp')
  .controller('TaskController', function ($scope, TaskFactory) {
    $scope.addTodo = function () {
      $scope.todos.push({text : $scope.formTodoText});
      $scope.formTodoText = '';
    };
  });

这在工厂

angular.module('myApp')
  .factory('TaskFactory', function ($q, $http) {
    var sendTasks = function(params) {
      var defer = $q.defer();
      console.log(1, params);
      $http.post('http://localhost:3000/task/save', params)
        .success(function(data) {
          console.log(2);
          console.log('data', data);
        })
        .error(function(err) {
          defer.reject(err);
        });
      return defer.promise;
    }

    return {
      sendTask: function(taskData) {
        console.log('taskData', taskData);
        return sendTasks('/task/save', {
          taskData : taskData
        })
      }
    }
  });

我需要知道的是,如何将数据从控制器发送到工厂以便将POST发送到指定的路由?

3 个答案:

答案 0 :(得分:1)

You can follow Dan Wahlin blog post.

<强>控制器:

angular.module('customersApp')
    .controller('customersController', ['$scope', 'dataFactory', function ($scope, dataFactory) {

    $scope.status; 

    dataFactory.updateCustomer(cust)
      .success(function () {
          $scope.status = 'Updated Customer! Refreshing customer list.';
      })
      .error(function (error) {
          $scope.status = 'Unable to update customer: ' + error.message;
      });    
}

<强>工厂:

angular.module('customersApp')
    .factory('dataFactory', ['$http', function($http) {

    var urlBase = '/api/customers';   

    dataFactory.updateCustomer = function (cust) {
        return $http.put(urlBase + '/' + cust.ID, cust)
    };

}

希望能解决你的问题。

答案 1 :(得分:1)

您只需要使用所需的参数调用工厂内的函数/方法。

&#13;
&#13;
 angular.module('myApp')
  .controller('TaskController', function ($scope, TaskFactory) {
    $scope.addTodo = function () {
      $scope.todos.push({text : $scope.formTodoText});
      TaskFactory.sendTask({data : $scope.formTodoText})
      $scope.formTodoText = '';
    };
  });
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以直接在作为依赖项传递给控制器​​的TaskFactory上调用该函数。

我已稍微清理了您的代码并创建了a plunk for you here

以下是代码:

<强>控制器

i = 0
while (drawingNeeded) do
    angle = Math.Abs(90 - (i % 180)) *  Math.PI / 180;
    endPoint.x = centerPoint.x + lineLength * Math.Cos(angle);
    endPoint.y = centerPoint.y + lineLength * Math.Sin(angle);
    //redraw canvas, draw static objects
    drawLine(centerPoint, endPoint);
    i++;

<强>工厂

(function(angular) {

    // Initialise our app
    angular.module('myApp', [])
        .controller('TaskController', function($scope, TaskFactory) {

      // Initialise our variables
      $scope.todos = [];
      $scope.formTodoText = '';

      $scope.addTodo = function() {
        // Add an object to our array with a 'text' property
        $scope.todos.push({
          text: $scope.formTodoText
        });

        // Clear the input
        $scope.formTodoText = '';

        // Call function to send all tasks to our endpoint
        $scope.sendTodos = function(){
          TaskFactory.sendTasks($scope.todos);
        }
      };
  });

})(angular);