2016-04-16 26 views
0

私は単純なアプリケーションを持っています。サーバーアップロードファイルディスパッチ更新リストからファイルリストを表示します。 私は、異なるdivの下に2つのコントローラ "upload"と "files"を持っています。別のコントローラから関数を呼び出す

ファイルからloadData()を呼び出して、ファイルリストがアップロード後に更新されるようにしたいとします。 DOCE
app.controller( 'myCtrl1' 関数($の範囲、$ HTTP){

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

} 

})を更新

HTML UPDATED

<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コントローラの機能は

が更新問題 - 私がやりましたコードが変更され、コントローラーをマージしました。サービスが私のコントローラーのリフレッシュに役立たなかったので、

So今度は問題は私がloadData()をロードすることができますが、それはが2番目に消える...

+1

loaddataのを公開するサービスを作成し、両方のコントローラにサービスを注入。 –

答えて

1

コントローラ内のコントローラからメソッドを呼び出すことはできません。メソッドを抽出し、サービスを作成して呼び出す必要があります。これはあなたを助けLINK1LINK2

希望をクリックしてください完全なリファレンスについてhttp://plnkr.co/edit/FQnthYpxgxAiIJYa69hu?p=preview

:これはまた、例を互いからコードを分離し、

(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(); 
     } 
    ]); 
})(); 

それはより多くのテスト可能になります。

+0

サービスを追加すると、あるコントローラから別のコントローラにデータを取得できますが、これは他のコントローラのボタンをクリックするためにページのデータを更新するのに役立ちません。(リストではサービスを使用して方法を見つけることができませんあなたの例の後でさえ) – Manojcode

0

メソッドの$ emitと$を使用して、2つのコントローラ間の通信を行うことができます。

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サービスを注入して、コントローラを別のコントローラにインスタンス化する必要があります。あなたは$スコープではなく、コントローラのインスタンスにメソッドを添付しているので、あなたがTestCtrl1.myMethod()を呼び出すことはできませんどのような場合には

​​3210

あなたは、コントローラを共有している場合、常に行う方が良いでしょう: -

.controller('TestCtrl1', ['$log', function ($log) { 
    this.myMethod = function() { 
    $log.debug("TestCtrl1 - myMethod"); 
    } 
    }]); 
関連する問題