2014-06-04 42 views
0

我想創建一個服務,當我可以設置我的formSubmit。從服務參數執行範圍功能

例如。在控制器A中,我調用「service.setFormSubmit(doThis(obj))」,並在控制器B中調用「service.getFormSubmit()」。它將在控制器B中執行函數doThis(obj)。

UPDATE - 重新提出的問題。

我有1個視圖,我想編輯或創建一個類別。這意味着我需要一個動態的ng提交。我想在控制器中這樣做。所以像這樣:

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

而在創建我想改變formSubmit var爲createCategory當然。 所以我可以在創建和編輯類別之間做出區別。

這可能嗎?如果有人有辦法做到這一點,這將是非常好的。

在此先感謝!

+0

我不明白這一點,也許嘗試改寫或添加一些代碼 –

+0

我已經添加了一些代碼示例 – guidsen

+0

@guidsen它仍然沒有太大意義。服務是單身人士,所以你可以存儲你需要的任何東西並將其恢復。 – lucuma

回答

1

相反繞過需要被eval'ed串,使用該服務來直接控制器之間共享的功能性。

該服務可以是污垢簡單:

.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

+0

謝謝,我想waaaay難.... – guidsen

0

如果你不重新加載頁面,你可以在你的服務中創建一個封裝的變量。您的設置調用將分配傳遞給該變量的值,並且您的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; 
     } 
    } 
});