У меня есть главная страница, состоящая только из двух частей: заголовок навигации и динамический контент.Как изменить угловые данные вне контроллера?
index.html:
<div ng-controller='MainCtrl'>
<li ng-repeat="nav in navs">
<a href="#{{nav.url}}">{{nav.name}}</a>
</li>
</div>
<div ng-view></div> <!-- replaced by ngRoute -->
Навигационная достигается следующим образом:
app.config(function($routeProvider, $locationProvider) {
$routeProvider.when("/test", {
templateUrl : "templates/test.html",
controller : "testController"
});
});
заголовок ссылки должны быть предоставлены бэкэндом по запросу каждого веб-сервиса. Вопрос: как я могу вызвать следующую функцию init
из другого контроллера (тот, который получает ответ get)? I lateron хочет вызвать этот метод из разных контроллеров.
app.controller('MainCtrl', ['$scope', function($scope) {
this.init = function(data) {
$scope.navs = data;
}
}]);
Я попытался следующие, которые не работают:
test.html:
<div>
<h1>some stuff provided by testController.js</h1>
</div>
testController.js:
angular.module('test').controller('testController', ['$scope', '$http', '$controller', function($scope, $http, $controller) {
$http.get(url)
.success(function(data) {
$controller('MainCtrl').init(data.mynavigation); //assume navigations exists
//process content in data
});
}]);
Результат:
Error: [$injector:unpr] http://errors.angularjs.org/1.4.3/$injector/unpr?p0=%24scopeProvider%20%3C-%20%24scope%20%3C-%20MainCtrl
Вы можете предоставить планшет? что вы делаете что-то не так – Grundy
Используйте службу для обмена данными и методами между компонентами приложения, такими как контроллеры. – charlietfl
Ну, моя цель - просто инициализировать переменную '$ scope.navs' с помощью навигационных ссылок внутри конроллера. Проблема в том, что контроллеры «не входят в сферу навигации», так как «MainCtrl» присваивается области навигации. – membersound