2016-06-17 2 views
1

Я имею щ состояния маршрутизатора, как это:Вводят Resolve Завис на каждый контроллер в UI-маршрутизатор

$stateProvider.state('parent', { 
    templateUrl: 'tpl/a.html', 
    resolve: { 
    resA: function() { 
     return { 'value': 'A' }; 
    } 
    }, 
    controller: function($scope, resA) { 
    $scope.resA = resA.value; 
    } 
}); 

В шаблоне HTML я использую другой контроллер (контроллер ребенка). Этому дочернему контроллеру необходимо разрешить зависимость от состояния ui router. Но он не вводится детскому контроллеру.

TPL/a.html

<h1>Hello</h1> 
<div ng-controller="ChildCtrl"> 
</div> 

ChildCtrl

var app = angular.module('app', []); 
app.controller('ChildCtrl', function($scope, resA) { 
    // some codes 
}); 

Я получил сообщение об ошибке, что RESA unkonwn в ChildCtrl. Как добавить resA в ChildCtrl?

ответ

2

Я вижу 3 варианта:

1) поставить значение в $ объеме родительского контроллера

//it would be available in child controller in `$scope.a` 
$stateProvider.state('parent', { 
    templateUrl: 'tpl/a.html', 
    resolve: { 
    resA: function() { 
     return { 'value': 'A' }; 
    } 
    }, 
    controller: function($scope, resA) { 
    $scope.resA = resA.value; 
    } 
}) 
.state('parent.child', { 
    templateUrl: 'tpl/child.html', 
    controller: function($scope) { 
    console.log($scope.resA) //'{value: "A"}' 
    } 
}); 

2) поместить контроллер ребенка в качестве контроллера для суб-пути, и решить RESA там также

var a = { 'value': 'A' }; 
$stateProvider.state('parent', { 
    templateUrl: 'tpl/a.html', 
    resolve: { 
    resA: function() { 
     return a; 
    } 
    }, 
    controller: function($scope, resA) { 
    $scope.resA = resA.value; 
    } 
}) 
.state('parent.child', { 
    templateUrl: 'tpl/child.html', 
    resolve: { 
    resA: function() { 
     return a; 
    } 
    }, 
    controller: function($scope, resA) { 
    $scope.resA = resA.value; 
    } 
}); 

3) сделать некоторые услуги, которые будут предоставлять данные (которые в настоящее время хранится в RESA) для контроллера и ввести его в обоих контроллерах

+0

Спасибо за ваш ответ. На втором этапе я не понимаю. Можете ли вы добавить некоторые коды? – windupurnomo

+0

@windupurnomo, проверьте ответ, я привел пример – BotanMan

0

Оформить заказ @ Ответ BotanMan.

Также другой способ, аналогичный 3. отвечу.

Включите ваш ресурс в службу.

var app = angular.module('app'); 
app.service('resA', function() { 
    // your service here 
}); 

И включить его так:

$stateProvider.state('parent', { 
    templateUrl: 'tpl/a.html', 
    resolve: { 
    resA: 'resA' //your service name 
    }, 
    controller: function($scope, resA) { 
    $scope.resA = resA.value; 
    } 
}); 

Таким образом, вы можете использовать этот ресурс, как вы хотели:

var app = angular.module('app', []); 
app.controller('ChildCtrl', function($scope, resA) { //now it should work 
    // some codes 
}); 

См docs на решимостью.

+0

Спасибо за ваш ответ @eenagy. My ChildCtrl также используется в другом состоянии. Является ли oke resA работать как решение зависимости и обслуживание тоже? Я обновляю свой вопрос ... – windupurnomo

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