2016-04-16 91 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"); 
    } 
    }]); 
相關問題