Wątek przeniesiony 2015-02-04 12:54 z Webmastering przez dzek69.

Jak wyświetlić nowe okno z poziomu JS/AngularJS?

0

Hej,

mam listę ludzi, po kliknięciu ładnie wraca mi do kontrola przekazując ID tej osoby, następnie odpytuje API o wszystkie informacje na temat podane ID i teraz chciałbym wyświetlić nowe okno albo nową zakładkę (nie przeładowywać obecnej) i przekazać tam pewne dane. Jak to zrobić?

0

Lenistwooooooo

window.open("http://example.com");
0

No tak okay, ale ja chce wyświetlić jakby inną podstronę. Teraz to jest tak że jest widok oraz Controller angulara i wszystko sobie w nim siedzi. Natomiast ja chce zrobić tak że jak się kliknie to przechodzi do jakby nowego kontrolera i z jego poziomu wywala mi ten widok odpowiednio przygotowany (inne dane, inne wykresy itd.) i nie wiem jak to zrobić żeby przejść z jednego kontrolera do drugiego.

Ewentualnie może być ten sam kontroler co obecnie, ale żeby mi wyświetlił nowy widok.

EDIT:
Nie wiem które z tych 2 podejść są lepsze, wydaje mi się że pierwsze: mam 2 stronki, 2 kontrolery, po kliknieciu w glownej stronie na link, przenosi mnie do drugiego kontrolera tam jest generowane co trzeba i w nowym oknie/zakładce generowany wynik, oczywiście zostając ciągle "w miejscu" w tym pierwszy widoku.

Mam 2 pliki: Cars.js i Car.js

w Cars to jest ten główny mój widok, w którym mam wszystko. Natomiast w Car.js chciałbym wyświetlić konkretne informacje o konkretnym samochodzie.

Cars.js:

var myapp = angular.module('main');

myapp.controller('CarsController', ['$scope', '$http',  '$controller', function($scope, $http, $controller) {
   $scope.changeView = function(userId) {
            $controller('PersonVisitController',{$scope: userId});
}

Obecnie car.js:

var myapp = angular.module('main');
myapp.controller('CarController', [
    '$scope', function($scope) {
        var t = $scope.carId;
    }
]);

I teraz jak zrobić aby po kliknięciu w CarsController na tą funkcję, przeszedł mi do CarController zwracając też inny widok?


[EDIT]
dostaje coś takiego: [ng:areq] Argument 'CarController' is not a function, got undefined.
Już jak kliknę to wtedy mnie przekierowuje i mam odpowiedni parametr w URL, także to jest, ale teraz to nie wchodzi chyba do tego kontrolera w pliku car.js :/
Czemu tak się dzieje?

`dodanie znaczników ``` - @furious programming

------------FINAL

Zrobiłem to, jutro rano wrzócę rozwiązanie problemu.

1

Rozwiązanie:
Cars.js, funkcja:

  $scope.changeView = function (userId) {
        $scope.userId = userId;
            $controller('PersonVisitController',{$scope: userId, $location: location});
          
        }

Istotne aby w Cars.js wstrzykiwać controller:

myapp.controller('CarsController', ['$scope', '$http', '$controller', function($scope, $http, $controller) {

Car.js

(function() {
    angular.module('main').controller('PersonVisitController', ['$scope', '$location', function($scope, $location) {
   
            });
}());

Potem bundleConfig:

   bundles.Add(new ScriptBundle("~/bundles/app").Include(
                        "~/Scripts/app/app.js",
                        "~/Scripts/app/services.js",
                        "~/Scripts/app/directives.js",
                        "~/Scripts/app/Cars.js",
                        "~/Scripts/app/CarController.js",                    
                        ));

Oraz konfig apki:

var appRoot = angular.module('main', ['ngRoute', 'ngGrid', 'ngResource', 'angularStart.services', 'angularStart.directives', 'angularMoment', 'ui.date']);    

appRoot
    .config([
        '$routeProvider', function($routeProvider) {
          
            $routeProvider
                .when('/home', { templateUrl: './home/main', controller: 'CarsController' })
                .otherwise({ redirectTo: '/home' });
            $routeProvider
               .when('/car', { templateUrl: './home/car', controller: 'CarController' })
               .otherwise({ redirectTo: '/home' });
          
        }
    ])
    .controller('RootController', [
       //....
    ])
 .controller('CarController', [
        '$scope', function ($scope){
            $scope.$on('$routeChangeSuccess', function (e, current, previous) {
                $scope.activeViewPath = $location.path();
            });
        }
 ]);

Tyle :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1