1

Я играю с использованием uibModal с завода вместо того, чтобы использовать его из своего контроллера. Диалоговое окно появляется, и данные поля возвращаются в службу при нажатии OK, но я не знаю, как вернуть данные к моему контроллеру, где он будет добавлен в мою модель. Любые указатели?

Вот мой завод код:

'use strict'; 

angular.module('ngTableScopeApp') 
.factory('DialogService', function($uibModal){ 

    var DialogService = {}; 
    DialogService.newObj = {}; 

    DialogService.addNewItem = function(template, $q){ 

    this.modalInstance = $uibModal.open({ 
     templateUrl: template, 
     controller: function($scope, $uibModalInstance){ 
     $scope.ok = function() { 
      $uibModalInstance.close($scope); 
      return this.newObj; 
     }; 

     $scope.cancel = function() { 
      $uibModalInstance.dismiss('cancel'); 
      return null; 
     }; 
     } 
    }); 
    }; 
    return DialogService; 
}); 

Вот код контроллера:

'use strict'; 

/** 
* @ngdoc function 
* @name ngTableScopeApp.controller:MainCtrl 
* @description 
* # MainCtrl 
* Controller of the ngTableScopeApp 
*/ 
angular.module('ngTableScopeApp') 
    .controller('MainCtrl', function (NgTableParams, DummyData, DialogService) { 

    var self = this; 
    self.data = DummyData.generateData(1); 

    var createUsingFullOptions = function() { 

     var initialParams = { 
     count: 10 // initial page size 
     }; 
     var initialSettings = { 
     // page size buttons (right set of buttons in demo) 
     counts: [5, 10, 25, 50], 
     // determines the pager buttons (left set of buttons in demo) 
     paginationMaxBlocks: 13, 
     paginationMinBlocks: 2, 
     dataset: self.data //DummyData.generateData(1) 
     }; 
     return new NgTableParams(initialParams, initialSettings); 
    }; 

    self.customConfigParams = createUsingFullOptions(); 

    self.addNewItem = function(){ 

     DialogService.addNewItem('views/addNewItem.html', self); 
    }; 
    }); 
+0

Надеюсь, что вы можете получить доступ к данным из контроллера с помощью D переменная ialogService.newObj. –

ответ

1

Вы можете использовать close доступный метод на $uibModalInstance сервис, в котором вы можете передать данные при закрытии всплывающего окна , И тогда вы можете использовать объект обещания result, который вызывается, когда модальный закрывается. Какими бы ни были данные, полученные от метода $uibModalInstance.close. Убедитесь, что вы возвращаете обещание, возвращенное методом $uibModal.open.

завод

DialogService.addNewItem = function(template, $q){ 

    this.modalInstance = $uibModal.open({ 
      templateUrl: template, 
      controller: function($scope, $uibModalInstance){ 
      $scope.ok = function() { 
       $uibModalInstance.close({ data: 'OK Called' }); 
      }; 

      $scope.cancel = function() { 
       $uibModalInstance.close({ data: 'Cancel Called' }); 
      }; 
      } 
     }); 
    }; 
    return this.modalInstance; 
}; 

Контроллер

DialogService.addNewItem('views/addNewItem.html', self) 
.result.then(function(data) { 
    console.log("data", data); // print { data: 'MyCustomData' } 
}); 

модальный контроллер

$scope.cancel = function() { 
    $uibModalInstance.close({data: 'MyCustomData'}); 
}; 
+1

должен возвращать экземпляр '$ uibModal.open()' из метода службы – charlietfl

+0

@charlietfl Спасибо за хедз-ап, обновленный ответ :-) –

+0

также для более общего использования может вернуть 'modalInstance.result'. Тогда контроллер просто управляет обещанием – charlietfl

Смежные вопросы