La raison pour laquelle window
la variable étant undefined
est le fait que vous avez déclaré une variable nommée window à nouveau dans la portée locale .
Selon les règles de scoping de javascript/typescript
Avant d'accéder à la variable globale, la valeur de la variable locale est recherchée. De même, lorsque vous déclarez initialement une variable, celle-ci est définie comme indéfinie, d'où le message d'erreur que vous recevez.
Il suffit donc de modifier le nom de la variable dans laquelle vous capturez la référence de l'onglet ouvert.
var newWindow = window.open('some_url');
Ce n'est toutefois pas l'approche recommandée, car les applications angular2 peuvent fonctionner dans divers environnements, tels que les mobiles, ou être rendues côté serveur où window
L'objet peut être disponible ou non. Sans compter qu'il serait très difficile de simuler l'objet fenêtre dans les tests.
Au lieu de cela, vous pouvez envelopper le window
dans un service et injecter ce service dans votre composant. De cette façon, vous pouvez simplement substituer l'objet service en fonction de l'environnement, en utilisant Injection de dépendances
Le fichier de service
@Injectable()
export class WindowRef {
constructor() {}
getNativeWindow() {
return window;
}
}
Le fichier du composant
@Component({
selector : 'demo',
template : '<div> Demo </div>'
})
class DemoComponent {
nativeWindow: any
constructor( private winRef: WindowRef ) {
this.nativeWindow = winRef.getNativeWindow();
}
protected assignActity(type: string): void {
var newWindow = this.nativeWindow.open('/#/link');
this.Service.assignActivity(type).subscribe(res => {
newWindow.location = '/#/link/' + res;
console.log(res);
})
}
0 votes
window.open('some url');
fonctionnera mais si vous voulez utiliser angular-universal, vous éviterez de manipuler la fenêtre directement.0 votes
Donc c'est possible ou pas
0 votes
J'ai cette exigence, donc si vous avez une solution de contournement, veuillez me la suggérer.
0 votes
Je ne suis pas habitué à angular-universal mais j'ai vu que l'on peut accéder à une variable
isBrowser
(d'après ce dont je me souviens). Utilisez donc DI pour injecter cette variable dans votre application afin de pouvoir l'utiliser de n'importe où. Ensuite, lorsque vous devez utiliserwindow.open
Il suffit de l'emballer comme ça :if (isBrowser) { window.open('some url) }
0 votes
@Rhushikesh , Je suis en difficulté avec l'exigence d'ouverture de popup dans l'application angular2 avec mvc pouvez-vous plz fournir l'échantillon de code comment vous ouvrez la fenêtre popup du navigateur dans votre application.