从服务参数执行范围功能

时间:2014-06-04 22:33:50

标签: angularjs angular-services

我在设置formSubmit时尝试创建服务。

例如。在控制器A中,我调用" service.setFormSubmit(doThis(obj))"在控制器B中,我调用" service.getFormSubmit()"。它将在控制器B中执行函数doThis(obj)。

更新 - 重新制定的问题。

我有1个视图,我想编辑或创建一个类别。这意味着我需要动态的ng-submit。我想在控制器中这个。像这样:

$scope.editCategory = function(obj) {
     $scope.formSubmit = 'editCategory'
}

在创建时我想将formSubmit var更改为createCategory。 所以我可以在创建和编辑类别之间做出改变。

这可能吗?如果有人有办法做到这一点真的很好..!

提前致谢!

2 个答案:

答案 0 :(得分:1)

使用该服务直接在控制器之间共享功能,而不是传递需要评估的字符串。

这项服务很简单:

.factory('MyService', function(){
  var service = {};
  return service;
});

一旦注入并分配给两个控制器中的范围变量,就会有一个中间单元,可以作为跨控制器协作的可修改通道。

.controller('FirstController', function($scope, MyService){
  $scope.service = MyService;
})
.controller('SecondController', function($scope, MyService){
  $scope.service = MyService;

  $scope.service.create = function(obj){
    console.log('Creating');
  }

  $scope.service.edit = function(obj){
    console.log('Editing');
  }
})

FirstController的范围内,您现在可以在SecondController的范围内调用该函数:

<div ng-controller="FirstController">
  <input type="checkbox" ng-model="button.type"> Toggle create/edit<br/>
  <button ng-if="button.type" ng-click="service.create(obj)">Create</button>
  <button ng-if="!button.type" ng-click="service.edit(obj)">Edit</button>
</div>

Demo

答案 1 :(得分:0)

如果您没有重新加载页面,则可以在服务中创建封装变量。您的set调用将分配传递给该变量的值,并且您的get调用将该变量返回给调用者。

我实现传递数据的一种方法是使用服务提交表单并将Json结果返回给服务。将Json对象存储在返回的封装变量中,然后将成功或失败传递给控制器​​。成功后,让控制器重定向视图,该视图将使用角度路由和ng-view重定向。一旦新视图与新控制器一起加载到页面中,您就可以调用服务中的变量来检索下一个控制器上的数据。

示例代码:

app.factory('service', function ($q, $http) {
    var savedData;

    return {
        loadData: function() {
            return data;
        },
        search: function (parameters) {
            var searchURL = '/MVCController/Search?parameter1=' + parameters.one +
                '&parameter2=' + parameters.two;
            var deferred = $q.defer();

            $http.get(searchURL).success(function (data) {
                savedData = data;
                deferred.resolve(true);
            }).error(function(data) {
                data = 'An error occurred while searching: ' + data;
                savedData = data //(if you want to save the error)
                deferred.reject(data);
            });

            return deferred.promise;
        }
    }
});