Мне нужно получить некоторые атрибуты, которые устанавливаются в div ng-view (вне области основного контроллера). Использование пользовательской директивы для передачи значений атрибутов - это решение, которое я предполагаю. Итак, у меня есть:
<body ng-app="myapp">
<!--Load ng-view and add attrs-->
<div ng-view
my-directive
first-attr="attrOne"
second-attr="attrSecond">
</div>
</body>
директива:
.directive('myDirective', myDirective);
function myDirective() {
var directive = {
restrict: 'AE',
link:link,
scope: {
firstVal: '=firstAttr',
secondVal: '=secondAttr'
}
};
return directive;
}
настройки приложения и контроллер:
angular
.module('myapp', [
'ui.router'
])
.config(function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('/myApp');
$stateProvider
.state('myApp', {
url: '/myApp',
templateUrl: 'main.html',
controller: 'mainCtrl'
});
});
.controller(mainCtrl, mainCtrl);
function mainCtrl ($scope) {
}
Возможно ли получить эти значения атрибутов в основном контроллере при загрузке страницы?
Заранее спасибо!
Предполагая, что существует родительская дочерняя связь между "mainController" и директивой.
Вы можете использовать излучатель событий
директива:
.directive('myDirective', myDirective);
function myDirective() {
var directive = {
restrict: 'AE',
link:link,
controller:controller
scope: {
firstVal: '=firstAttr',
secondVal: '=secondAttr'
}
}
return directive;
function controller($scope){
//SOME LOGIC
$scope.firstVal = "firstVal LOGIC"
$scope.secondVal = "secondVal LOGIC"
//EMIT AFTER LOGIC DONE
var data = { firstVal: $scope.firstVal, secondVal: $scope.secondVal};
$scope.$emit('YOUR_CONTROLLER_EVENT', data);
}
}
контроллер:
.controller(mainCtrl, mainCtrl);
function mainCtrl ($scope) {
$scope.$on('YOUR_CONTROLLER_EVENT', function(event, data){
var firstVal = data.firstVal;
var secondVal = data.secondVal;
});
}