0

当我可以设置表单提交时,我正在尝试创建服务。

例如。在控制器 AI 中调用“service.setFormSubmit(doThis(obj))”,在控制器 BI 中调用“service.getFormSubmit()”。它将在控制器 B 中执行函数 doThis(obj) 的位置。

更新 - 重新制定的问题。

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

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

在创建时,我当然想将 formSubmit var 更改为 createCategory。所以我可以在创建和编辑类别之间有所作为。

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

提前致谢!

4

2 回答 2

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>

演示

于 2014-06-05T01:05:07.820 回答
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;
        }
    }
});
于 2014-06-04T22:55:26.247 回答