Angularjs 从服务参数执行范围函数

Angularjs 从服务参数执行范围函数,angularjs,angular-services,Angularjs,Angular Services,当我可以设置formSubmit时,我正在尝试创建一个服务 比如说。在控制器A中,我调用“service.setFormSubmit(doThis(obj)),在控制器B中,我调用“service.getFormSubmit()”。它将在控制器B中执行函数doThis(obj) 更新-重新制定问题。 我有一个视图,我想在其中编辑或创建一个类别。这意味着我需要一个动态的ng提交。我想把它放在控制器里。所以像这样: $scope.editCategory = function(obj) {

当我可以设置formSubmit时,我正在尝试创建一个服务

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

更新-重新制定问题。

我有一个视图,我想在其中编辑或创建一个类别。这意味着我需要一个动态的ng提交。我想把它放在控制器里。所以像这样:

$scope.editCategory = function(obj) {
     $scope.formSubmit = 'editCategory'
}
当然,在create上,我想把formSubmit变量改为createCategory。 因此,我可以在创建和编辑类别之间做出区别

这可能吗?如果有人有办法做到这一点,那就太好了


提前谢谢

如果不重新加载页面,可以在服务中创建一个封装的变量。set调用将分配传递给该变量的值,get调用将向调用者返回该变量

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

示例代码:

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;
        }
    }
});

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

服务可以非常简单:

.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>

切换创建/编辑
创造 编辑

我不明白,也许尝试重新措辞或添加一些代码我添加了一些代码example@guidsen这仍然没有太多的意义。服务是单例的,因此您可以存储任何需要的内容并将其取回。@lucuma您如何创建一个在两个控制器之间传递ng submit变量的服务?如果您试图在控制器之间共享功能,则逻辑可能应该在服务中,而不是控制器中。