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?

0
Siyfion 14 sierpień 2014, 13:22

3 odpowiedzi

Najlepsza odpowiedź

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.

3
runTarm 14 sierpień 2014, 11:33

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.

1
pkozlowski.opensource 14 sierpień 2014, 11:43

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);
   };
};
0
nilsK 14 sierpień 2014, 09:37