2014-12-02 2 views
3

Я разрабатываю веб-приложение с AngularJS, и я хотел бы знать, как я могу установить переменные $scope, являющиеся достоянием всех моих контроллеров (или их большая часть).Задайте общие переменные сферы в забеге

То, что я пытаюсь:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ui.bootstrap']) 
    .run(function($ionicPlatform, $rootScope, $location, Common) { 
    $ionicPlatform.ready(function() { 

     //Set default global values 
     $rootScope.$on('$stateChangeSuccess', function (event) { 
     $scope.universe = "Universe and other things :)"; 
     $scope.elsewhere = "Good day sir"; 
     $scope.fish = "Perfectly well"; 
     }); 
    }); 
    }); 
}); 

Так что я не должен писать каждый раз одно и то же в каждом контроллере:

angular.module('starter.controllers').controller('Controller1', function($scope) { 
    //I don't want this: 
    $scope.universe = "Universe and other things :)"; 
}); 

angular.module('starter.controllers').controller('Controller2', function($scope) { 
    //I don't want this: 
    $scope.elsewhere = "Good day sir"; 
}); 

angular.module('starter.controllers').controller('Controller3', function($scope) { 
    //I don't want this: 
    $scope.fish = "Perfectly well"; 
}); 

Важно то, что я даже не хочу использовать services для этой цели, потому что я не хочу назначений в каждом контроллере.

+0

Этот '$ rootScope. $ On ('$ stateChangeSuccess' ...' должен работать, это то, что я обычно делаю. Обычно я делаю контроллер, скажем 'AppCtrl', и добавляю' ng-controller = "AppCtrl" 'к тегу' ', а затем в контроллере, я бы добавил' $ scope. $ on ('$ stateChangeSuccess' ... 'и установить мои« общие »переменные области. – jValdron

ответ

4

Чтобы добавить мой комментарий:

Это то, что я хотел бы сделать, создать контроллер для моего приложения, который был бы мой «глобальный» материал.

.controller('AppCtrl', ['$scope', function AppCtrl($scope) { 

    $scope.$on('$stateChangeSuccess', function() { 
     $scope.universe = "Universe and other things :)"; 
     $scope.elsewhere = "Good day sir"; 
     $scope.fish = "Perfectly well"; 
    }); 

}); 

И добавьте в ваш HTML:

<html ng-app="myAppName" ng-controller="AppCtrl"> 

Так что это создаст отдельный $scope, чтобы получить доступ к этой сфере от других контроллеров «ребенка», вы могли бы сделать $scope.$parent.

Однако, если взять исходный код, это должно работать:

angular.module('starter', ['ionic', 'starter.controllers', 'starter.services', 'ui.bootstrap']) 
    .run(function($ionicPlatform, $rootScope, $location, Common) { 
    $ionicPlatform.ready(function() { 

     //Set default global values 
     $rootScope.$on('$stateChangeSuccess', function (event) { 
     $rootScope.universe = "Universe and other things :)"; 
     $rootScope.elsewhere = "Good day sir"; 
     $rootScope.fish = "Perfectly well"; 
     }); 
    }); 
    }); 
}); 

И тогда вы сможете использовать $rootScope в контроллерах, или universe и т.д., в ваших HTML/просмотров.

+0

Второе решение в порядке. Но что, если я хотел использовать '$ scope' напрямую, а не' $ rootScope' в моих контроллерах? –

+0

Вы не сможете, так как вы не можете установить что-либо на '$ scope', к которому у вас нет доступа. вероятность того, что они даже не созданы, когда вы звоните. Поскольку все контроллеры создают свою изолированную «$ scope», нет никакого способа, если вы не используете сервис/провайдер/etc, чтобы вводить что-либо в эту '$ scope' Тем не менее, довольно уверенный угло-ui-router предоставляет свойство currentScope в событии. Я бы играл с th в. – jValdron

+0

Я попытался сыграть с свойством 'currentScope', но когда я его установил, кажется, что он не отображается в контроллере как' $ scope'. [Взгляните сюда] (https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$on). –

Смежные вопросы