Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Angular2 RC5 No ViewResolver

Tags:

angular

I'm updating my angular2 project to rc5. I have a Html Resolver. It worked fine bevor I updated to rc5. My problem is that "ViewResolver" was removed in rc5. What option do I have that the resolver works?

import {Injectable, ComponentMetadata, ViewMetadata, Type} from '@angular/core';
import {Globalservice} from './Service/Globalservice';

export class AppResolver extends ViewResolver {
    resolve(component: Type): ViewMetadata {
        var view = super.resolve(component);

        if (view.templateUrl.trim().substring(view.templateUrl.lastIndexOf('.')+1).toUpperCase() == "HTML" && Globalservice.IsMobileDevice()) {

            var index = view.templateUrl.lastIndexOf('/') + 1;
            var newUrl: string = view.templateUrl.substr(0, index) + "m" + view.templateUrl.substr(index);

            view.templateUrl = newUrl;
        }
        return view;
    }

    doesFileExist(urlToFile): boolean {
        return false;
    }

}

Thanks for helping

like image 757
Lyror Avatar asked Apr 27 '26 23:04

Lyror


1 Answers

if you just want to modify the "templateUrl" from metadata.

you can create a dynamic proxy to intercept the "resolve" method of "UrlResolver":

import { UrlResolver } from '@angular/compiler';

export class MyUrlResolverInterceptor {

  static attach() {
    var proxied = UrlResolver.prototype.resolve;
    UrlResolver.prototype.resolve = (baseUrl: string, url: string): string => {
      var _url = doSomethingToMakeTheUrlYouWant(url);
      return proxied.bind(proxied)(baseUrl, _url);
    };
  };
}

and execute MyUrlResolverInterceptor.attach(); before bootstrap root module.

see demo here

like image 132
A-Hsien Avatar answered Apr 29 '26 22:04

A-Hsien



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!