gpt4 book ai didi

asp.net-mvc - 将 asp.net 服务器参数传递给 Angular 2 应用程序

转载 作者:太空狗 更新时间:2023-10-29 17:23:19 25 4
gpt4 key购买 nike

============================================= =================

编辑:升级到 2.0 Final 后的解决方案 - Passing server parameters to ngModule after RC5 upgrade

============================================= ===================

有什么方法可以将服务器参数传递给 Angular 2 应用程序?

即我想使用 MVC 对象“HttpContext.User.Identity.Name”并将其注入(inject)到我的 Angular 2 应用程序中的任何位置。

在 Angular 1 中,可以使用 ng“.constant”并将 .Net 对象序列化为 index.cshtml 中的 JSON。

看起来有一种传递参数的方法,但这不适用于 .Net 代码。 Define global constants in Angular 2

        //HTML - Bootstrapping
<script>

System.import('app/main').then(null, console.error.bind(console));
//I WOULD LIKE TO PASS SOME PARAMS TO APP/MAIN HERE
</script>

最终解决方案:(非常感谢 Thierry)

index.cshtml:

<script>
System.import('app/main').then(
module =>
module.main(
{
name: '@User.Identity.Name',
isAuthenticated: User.Identity.IsAuthenticated.ToString().ToLowerInvariant(),
}
),
console.error.bind(console)
);
</script>

main.ts:

...
import {provide} from '@angular/core';
...

export function main(params) {
bootstrap(AppComponent,
[
provide('Name', { useValue: params.name }),
provide('IsAuthenticated', { useValue: params.isAuthenticated }),
ROUTER_PROVIDERS,
HTTP_PROVIDERS,
LoggerService,
AuthenticationService
]);
}

用法:

import {Component, Injectable, Inject} from '@angular/core';
import {ROUTER_DIRECTIVES} from '@angular/router';

@Component({
selector: 'navbar',
templateUrl: 'app/components/header/navbar.html',
directives: [ROUTER_DIRECTIVES]
})
export class SomeComponent {

constructor(@Inject('Name') public username: string) {

}

最佳答案

一个选项是在您导入的模块中添加一个方法。因此您可以调用它来提供您想要的对象。

这是 app/main 模块的示例:

import {bootstrap} from '...';
import {provide} from '...';
import {AppComponent} from '...';

export function main(params) {
let userIdentityName = params.name; // for example
bootstrap(AppComponent, [
provide('userIdentityName', { useValue: userIdentityName })
]);
}

然后您可以像这样从您的 HTML 主页导入它:

<script>
System.import('app/main').then((module) => {
module.main({
userIdentityName: 'something from asp.net'
});
});
</script>

更新

对于最新版本的 Angular,您需要以这种方式利用模块:

export const USER_IDENTITY_NAME_TOKEN =
new InjectionToken('userIdentityName');

@NgModule({
(...)
providers: [
{
provide: USER_IDENTITY_NAME_TOKEN,
useValue: userIdentityName
}
]
})
export class MainModule() { }

关于asp.net-mvc - 将 asp.net 服务器参数传递给 Angular 2 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37337185/

25 4 0