2015-06-10 5 views
0

Я пытаюсь заставить родительский контроллер перезагрузить данные после обновления этих данных в его дочернем контроллере. код HTML:Как заставить родительский контроллер перезагрузить данные?

<div ng-controller='parentCtr'> 
     {{data}} 
     <mydirective></mydirective> 
    </div> 

Данные в parentCtr от сервера посредством вызова службы, как это:

function parentCtr(){ 
     $scope.data=someservice.getDate(); 
    } 
    in mydirective: function childCtr(){ 
     // do something to update data and save in the same server. 
    someservice.update(data); 
} 

Что мне нужно после someservice.update() успеха, мне нужно, чтобы обновить уровень родительского данные и показать мою информацию об обновлении.

+0

Не могли бы вы добавить и показать, как вы используете свое обслуживание? – Okazari

ответ

1

Вы можете сделать это таким образом. Извлеките сообщение, когда вызов будет успешным, и прослушайте сообщение в родительском контроллере, чтобы обновить состояние или страницу.

function parentCtr($scope,$state){ 
        $scope.data=someservice.getDate(); 
        $scope.$on('refreshParent', function(){ 
        $state.reload(); //reload the state 
      }) 
       } 

function childCtr($scope){ 
        // do something to update data and save in the same server. 
       someservice.update(data).then(function(){ 
       //emit a message when success 
       $scope.$emit('refreshParent'); 
     }); 
      } 
0

Позвони как этот

someService.update(data).then(function (response) { 
 
        
 
    recal funcation to load data 
 
       }, 
 
      function (err) {})

+0

Вы имеете в виду, что мне нужно вспомнить функцию загрузки данных при успешном обновлении? поэтому в этом случае мне нужно установить область: false в ChildCtr? в противном случае, как parentCtr знает, что перезагрузка данных в childCtr? Поскольку в ParentCtr мне нужно назначить эти данные в значение $ scope.data, которое определено в parentCtr – linyuanxie

0

Try передать функцию в области видимости директивы. Например:

(function() { 
    'use strict'; 
    angular 
     .module('myApp', []); 

    function myCtrl($scope){ 
     $scope.controllerFn = function(){ 
      console.log('Fired by directive'); 
     }; 
    } 

    function mydirective() { 
     return { 
      restrict: 'AE', 
      scope: { 
       parentFunction: '=' 
      }, 
      controller: function($scope, someservice) { 
       var data = {}; 
       someservice 
        .update(data) 
        .then($scope.parentFunction, null); 
      } 
     }; 
    } 

    angular 
     .module('myApp') 
     .controller('myCtrl', myCtrl) 
     .directive('mydirective', mydirective); 
    }()); 


    <div ng-controller='myCtrl'> 
    <mydirective parent-function="controllerFn()"></mydirective> 
    </div> 
+0

, но оно создаст область выделения, мне нужны некоторые другие данные из parentCtr, мне нужно задать область: false. – linyuanxie

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