2016-04-16 67 views
0

我有一个简单的应用程序,从服务器上传文件显示文件列表 - 显示更新列表。 我有两个控制器“上传”和“文件”在不同的div下。从另一个其他控制器调用功能

我希望能够从文件中调用loadData(),以便上传后更新我的文件列表。

修订DOCE
app.controller( 'myCtrl1', 函数($范围,$ HTTP){

$scope.fileupload=function() 
{ 
$scope.loadData(); 
} 
//load file list 
$scope.loadData = function() { 
$scope.fileslist = ["abc.abc", "cde.cde"]; 

} 

});

HTML 修订

<body ng-app="myapp" nng-controller="myCtrl1"> 
<div> 
     <div> 
     <form id="upload-form" method="post" action=""> 
      <input type="file" name="file"/> 
      <input type="submit" value="upload" class="button" ng-click="loadData()"/> 
     </form> 
     </div> 
</div> 

<div> 
<div> 
<form name="myForm"> 
    <ul> 
     <li ng-repeat="fileslist in fileslist"> 
      <label> 
       <input type="radio" ng-model="$parent.name" name="name" value="{{fileslist}}" required />{{fileslist}} 
      </label> 
     </li> 
    </ul> 
    <button ng-disabled="myForm.$invalid" class="button">Submit</button> 

我只是想运行 “loadData()” 当我在上传控制器上的按钮,点击myCtrl1控制器的功能

修订问题 - 我做代码更改并合并控制器,因为服务不会帮助我刷新控制器

所以现在的问题是我可以加载所需数据为什么loadData(),但它消失在第二...

+1

使暴露loadData服务,注入的服务,两个控制器。 –

回答

1

您不能调用控制器内的控制器的方法。您需要提取方法,创建服务并调用它。这也将彼此分离的代码,并使其更容易测试

(function() { 
angular.module('app', []) 
    .service('svc', function() { 
     var svc = {}; 

     svc.method = function() { 
      alert(1); 
     } 

     return svc; 
    }) 
    .controller('ctrl', [ 
     '$scope', 'svc', function($scope, svc) { 
      svc.method(); 
     } 
    ]); 
})(); 

例子:http://plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p=preview

如需完整的参考请点击LINK1LINK2

希望这有助于你。

+0

添加服务可以将数据从一个控制器转移到其他控制器,但是...由于在另一个控制器中单击按钮,这不会帮助我刷新页面上的数据..(在列表中,我无法找到使用服务的方式即使在你的例子之后) – Manojcode

0

您可以使用$ emit和$ on方法在两个控制器之间进行通信。

app.controller('first', ['$scope', '$rootScope', 
    function($scope) { 
     $rootScope.$on("CallMyMethod", function(){ 
      $scope.mymethod(); 
     }); 

     $scope.mymethod = function() { 
      // your code goes here 
     } 
    } 
]); 
app.controller('second', ['$scope', '$rootScope', 
    function($scope) { 
     $scope.childmethod = function() { 
      $rootScope.$emit("CallMyMethod", {}); 
     } 
    } 
]); 

您可以在调用$ rootScope。$ emit时将数据发送到mymethod。

0

您需要注入$controller服务来实例化另一个控制器内的控制器。

​​3210

在任何情况下,你不能叫TestCtrl1.myMethod(),因为你已经安装在$范围的方法,而不是在控制器实例。

如果共享控制器,那么这将永远是好做: -

.controller('TestCtrl1', ['$log', function ($log) { 
    this.myMethod = function() { 
    $log.debug("TestCtrl1 - myMethod"); 
    } 
    }]); 
相关问题