如何强制父控制器重新加载数据?

时间:2015-06-10 15:29:27

标签: angularjs controller

我试图在我的子控制器中更新这些数据后强制父控制器重新加载数据。 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()成功之后,我需要父级刷新数据并显示我的更新信息。

3 个答案:

答案 0 :(得分: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');
        });
            }

答案 1 :(得分:0)

像这样打电话给服务

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

答案 2 :(得分:0)

尝试将函数传递给指令的范围。例如:

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