2016-04-16 2 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 при нажатии на кнопку контроллера загрузки

ОБНОВЛЕНО проблема - я сделал изменение кода и слияние контроллера, так как обслуживание не помогло мне обновить контроллер

So Теперь проблема в том, что я могу загрузить требуемые данные, почему 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

Для получения полной справки, пожалуйста, нажмите на LINK1 или LINK2

Надеются, что это помогает вам.

+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", {}); 
     } 
    } 
]); 

Вы можете отправить свои данные в mymethod при вызове $ rootScope. $ Emit.

0

Вам необходимо ввести службу $controller, чтобы создать экземпляр контроллера внутри другого контроллера.

app.controller('TestCtrl2', ['$scope', '$controller', function ($scope, $controller) { 
    var testCtrl1ViewModel = $scope.$new(); //You need to supply a scope while instantiating. 
    //Provide the scope, you can also do $scope.$new(true) in order to create an isolated scope. 
    //In this case it is the child scope of this scope. 
    $controller('TestCtrl1',{$scope : testCtrl1ViewModel }); 
    testCtrl1ViewModel.myMethod(); //And call the method on the newScope. 
}]); 

В любом случае вы не можете назвать TestCtrl1.myMethod(), потому что вы присоединили метод на $ объеме, а не на экземпляре контроллера.

Если вы используете контроллер, то он всегда будет лучше сделать: -

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