Powiedz, że mam w moim głównym HTML:
<body ng-app="app" ng-controller="session as vmSession">
...
<!-- Modal will get created here -->
</body>
W moim modalnym mam link:
<a ui-sref="siteManagement({ site: vmSession.user.site._id })" ng-click="$dismiss()">Example</a>
Przycisk nie ma prawidłowego łącza, zamiast tego wskazuje na stronę root siteManagement
, a nie specyficznego dla użytkownika zalogowanego użytkownika. Zauważyłem, że modalne okno jest tworzone za pomocą klasy ng-isolate-scope
, jest to, co powstrzymuje to od pracy?
3 odpowiedzi
Podczas korzystania z obiektu {{X0}
$modal.open({
templateUrl: 'modal.html',
controller: 'modal',
scope: $scope
});
Jeśli brakuje scope:
, zostanie to domyślnie $rootScope
, który jest rodzicem zakresu sterownika sesji, dlatego nie można uzyskać dostępu do żądanych danych.
Jeśli nie chcesz używać opcji resolve
, jak sugeruje w jednej z odpowiedzi, istnieje opcja scope
do metody open
. Korzystając z opcji {{x3} Więc co możesz zrobić, to przekazać zakres kontrolera jako atrybut scope
i mieć modalne "widząc" wszystkie zmienne, które kontroler widzi.
Należy pamiętać, że $modal
spowoduje utworzenie zakresu dziecka podanego zakresu (lub $ rootscope, jeśli nie jest dostarczone), aby nie zanieczyszczać dostarczonego zakresu.
Możesz przekazać dowolną zmienną do sterownika modalnego:
$scope.openModal = function () {
var modalInstance = $modal.open({
templateUrl: '/templates/modal/yourModal.html',
controller: YourModalCtrl,
resolve: {
values: function () {
return {
aValue: '123',
anotherValue: {a: 'A', b: 'B'}
};
}
}
});
modalInstance.result.then(function (result) {
// ok result
}, function (result) {
// cancel result
});
};
var StepModalCtrl = function ($scope, $modalInstance, values) {
var aValue = values.aValue;
var anotherValue = values.anotherValue;
$scope.doSomething = function () {
console.log(aValue);
};
$scope.save = function () {
$modalInstance.close($scope.YourResult);
};
$scope.close = function () {
$modalInstance.dismiss($scope.YourResult);
};
};