我已经尝试加载没有使用路由器的模块SystemJsNgModuleLoader,但无法使其工作:
this.loader.load(url).then(console.info);
Run Code Online (Sandbox Code Playgroud)
我正在Cannot find module xxx使用我用于URL的任何字符串(aboslute/relative urls/paths ...尝试了很多选项).我浏览了一下路由器源代码,然后找不到其他任何东西SystemJsNgModuleLoader.我甚至不确定我应该使用这个......
昨天在ng-europe 2016会议上就提出了这个问题--Miško和Matias回答说:
MiškoHevery: 只需要掌握模块,就可以从那里获得组件工厂,您可以在应用程序中的任何位置动态加载组件工厂.这正是路由器内部所做的事情.因此,你也可以做到这一点.
MatiasNiemelä 唯一值得注意的是,在[Ng]模块上有一些被调用的东西
entryComponents,它可以识别可以延迟加载的组件 - 这是该组件集的入口.所以当你有懒惰加载的模块时,请把东西放进去entryComponents.
......但是,如果没有关于这个问题的例子和糟糕的文档,那就不是那么紧张的前进了;
任何人都知道如何手动加载模块,而不使用Route.loadChildren?如何掌握模块以及应该进入的内容究竟是什么entryComponents(我阅读常见问题解答,但不能在没有实际加载模块的情况下尝试)?
protorpc当我使用端点时,我会收到一些奇怪的错误.在这段代码中:
class Application(EndpointsModel):
_message_fields_schema = ('id', 'name')
created = ndb.DateTimeProperty(auto_now_add=True)
name = ndb.StringProperty()
roles = ndb.IntegerProperty(repeated=True)
updated = ndb.DateTimeProperty(auto_now=True)
owner = ndb.KeyProperty(kind='User')
@API.api_class(resource_name="application")
class ApplicationApi(protorpc.remote.Service):
@Application.method(http_method="GET",
request_fields=('id',),
name="get",
path="applications/{id}")
def ApplicationGet(self, instance):
if not instance.from_datastore:
raise endpoints.NotFoundException("Application not found.")
return instance
@Application.query_method(http_method="GET",
query_fields=('limit', 'order', 'pageToken'),
name="list",
path="applications")
def ApplicationList(self, query):
return query
Run Code Online (Sandbox Code Playgroud)
当我调用application.get()错误时如下:( 完全跟踪):
TypeError:只能从确切类型为Application的实体进行复制.收到了一个Application实例.
并且调用application.list()错误如下:( 完全跟踪):
ValidationError:
<class '.Application'>找到的字段项的预期类型<Application name: u'test'>(类型<class '.Application'>)
可能是什么导致了这个?我的其他模型具有几乎相同的代码(只是不同的属性)工作正常.
python google-app-engine protorpc google-cloud-endpoints endpoints-proto-datastore
我有一个身份验证服务,使经过身份验证的变量等于true或false.
checkAuthentication(){
this._authService.getAuthentication()
.subscribe(value => this.authenticated = value);
}
Run Code Online (Sandbox Code Playgroud)
如何this.authenticated更改值时如何执行函数?ngOnChanges没有发现变化.
服务器端渲染的资源很少,事实上,我找不到任何能清楚解释实际工作方式的东西.我已经看过一些回购,试图遵循代码,但没有设法弄清楚它的要点.如果我正常运行角度,我基本上知道会发生什么:
<html><body><my-app>...</my-app><SCRIPTS/></body></html><my-app>内部的所有好东西.对于这个程序:
@Component({
selector: 'my-app'
template: `<p *ngFor="let i of items">{{ i }}</p>`,
})
export class AppComponent {
items = [1, 2, 3];
}
Run Code Online (Sandbox Code Playgroud)
我可以看到检查html(plunker)并看到:
<my-app>
<!--template bindings={
"ng-reflect-ng-for-of": "1,2,3"
}-->
<p>1</p>
<p>2</p>
<p>3</p>
</my-app>
Run Code Online (Sandbox Code Playgroud)
到目前为止都清楚了!(:
但是预渲染会发生什么?如果我创建这样的文件:
<html>
<body>
<my-app>
<!--template bindings={
"ng-reflect-ng-for-of": "1,2,3"
}-->
<p>1</p>
<p>2</p>
<p>3</p>
</my-app>
<SCRIPTS/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
一旦加载脚本,Angular会做什么?我可以使用这个HTML而不是第一个吗?如果有人了解这个过程是如何工作的,请分享(;关于这些东西的任何信息都会有用......我可以复制outerHTML,并将其作为我的"预渲染页面"吗?...像这样:
如果没有,为什么?我正在寻找这个过程的本质,一个可以手工编写的例子......
如果我返回到相同的路由路径,则会显示错误
"Uncaught(承诺):TypeError:无法读取未定义的属性'isActivated'".
但不是第一次出现.谁能帮我 ?
const mainRoutes: Routes = [
{ path: '', pathMatch: 'full', redirectTo: '/home' },
{
path: 'home', loadChildren: './apps/home/home.module#HomeModule', canActivate: [AuthGuard],
resolve: {
crisis: NavigarionResolve
}
}
{ path: '**', component: PageNotFoundComponent }
];
Run Code Online (Sandbox Code Playgroud)
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { AuthService } from '../main/service/auth.service';
@Component({
selector: 'home-app',
templateUrl: 'apps/home/view/home.component.html',
providers: [AuthService]
})
export class HomeComponent implements OnInit {
loaded: boolean = false;
title = 'Customer Management …Run Code Online (Sandbox Code Playgroud) 从1.7.5更新(一切正常)我得到一个HTTP错误403:禁止尝试通过localhost打开任何网站.奇怪的是我在家里的设置几乎和在这里工作一样,一切都在那里工作......可能是我们在工作中使用的代理服务器的问题,因为这是我能想到的唯一区别?这是我得到的错误日志,所以如果有人知道发生了什么,请帮助(;
Traceback (most recent call last):
File "U:\Dev\GAE\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 1302, in communicate
req.respond()
File "U:\Dev\GAE\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 831, in respond
self.server.gateway(self).respond()
File "U:\Dev\GAE\lib\cherrypy\cherrypy\wsgiserver\wsgiserver2.py", line 2115, in respond
response = self.req.server.wsgi_app(self.env, self.start_response)
File "U:\Dev\GAE\google\appengine\tools\devappserver2\wsgi_server.py", line 246, in __call__
return app(environ, start_response)
File "U:\Dev\GAE\google\appengine\tools\devappserver2\request_rewriter.py", line 311, in _rewriter_middleware
response_body = iter(application(environ, wrapped_start_response))
File "U:\Dev\GAE\google\appengine\tools\devappserver2\python\request_handler.py", line 89, in __call__
self._flush_logs(response.get('logs', []))
File "U:\Dev\GAE\google\appengine\tools\devappserver2\python\request_handler.py", line 220, in _flush_logs
apiproxy_stub_map.MakeSyncCall('logservice', 'Flush', request, response)
File "U:\Dev\GAE\google\appengine\api\apiproxy_stub_map.py", line 94, in MakeSyncCall
return stubmap.MakeSyncCall(service, call, request, response) …Run Code Online (Sandbox Code Playgroud) 我知道有一些进展或至少计划(#5093,#5728)来改进typescript的模块路径映射,但我想知道我们目前的选择是什么(Angular2 beta.1,TypeScript 1.7,VS Code 0.10.5,nodejs) 5.4,systemjs 0.19).
为了让每个人都满意(编译器,编辑器和浏览器),我使用以下语法导入模块:
// C:/~somepath~/project_name/src/scripts/app/components/search/search.component.ts
import {Component} from 'angular2/core';
import {EmitterService} from '../../../core/services/emitter/emitter.service';
import {SearchService} from '../../../app/services/search/search.service';
Run Code Online (Sandbox Code Playgroud)
编译成
System.register(['angular2/core', '../../../core/services/emitter/emitter.service'], function(exports_1) {
Run Code Online (Sandbox Code Playgroud)
当我使用以下选项时
// tsconfig.json
{
"compilerOptions": {
"target": "ES5",
"module": "system",
"moduleResolution": "node"
...
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用没有所有这些点的导入:
import {EmitterService} from 'core/services/emitter/emitter.service';
Run Code Online (Sandbox Code Playgroud)
因为它变得非常丑陋,疯狂跟踪和噩梦移动模块.由于systemjs配置,它在浏览器中工作:
// system.conf.js
System.config({
map: {
app: "/scripts/app",
core: "/scripts/core",
}
}
Run Code Online (Sandbox Code Playgroud)
我可以"欺骗"通过将编译器"isolatedModules": true来tsconfig.json(没有这个它抛出一个错误),但在Visual Studio Code该Cannot find module错误仍然存在,我失去了代码提示.我听说node_modules …
我在我的应用程序中重新加载一些路线时遇到错误.第一次加载工作正常http://localhost:8001,所有其他路由从那里工作.但如果我在其他路线上重新加载页面,我会在下面得到一个例外...
例如:
http://localhost:8001 作品http://localhost:8001/application 作品http://localhost:8001/application/ 不起作用http://localhost:8001/application/add 不起作用谁知道为什么会这样?
EXCEPTION: Template parse errors:
Unexpected closing tag "head" ("
<link rel="stylesheet" href="/static/styles/default.css">
<!-- endinject -->
[ERROR ->]</head>
<body>
"): RootRoute@12:0
Unexpected closing tag "html" ("
</body>
[ERROR ->]</html>"): RootRoute@38:0
Run Code Online (Sandbox Code Playgroud)
@Component(...)
@RouteConfig([
{ path: '/', name: 'Root', component: DashboardComponent, useAsDefault: true },
{ path: '/application/...', name: 'Application', component: ApplicationRoute},
{ path: '/:unknown', redirectTo: ['/Root'] }
])
export class RootRoute {...}
Run Code Online (Sandbox Code Playgroud)
@Component({ template: `<p>Dummy Template...</p>` }) …Run Code Online (Sandbox Code Playgroud) 我最近阅读了@yearofmoo关于Angular2 Renderer的非常有趣的文章.它给了我一个想法,可以用Renderer做i18n .基本上使用这个功能:
createText(parentElement: any, value: string): any {
// this is called for every text node in the template
}
Run Code Online (Sandbox Code Playgroud)
并value通过将其映射到不同的语言进行简单转换:
let es = { "Hello": "Hola" }
value = "Hello"
value = es[value]
Run Code Online (Sandbox Code Playgroud)
我简要地看了一下这些问题和设计文档,但在走下这个兔子洞之前,我想检查是否有人对此有任何经验.
是否有任何问题可能导致无法正常工作?在我不知道的方式上有一些突破性的变化?关于这种方法的意见?
有些模块公开了他们的服务配置,例如:
AngularFireModule.initializeApp(firebaseConfig),StoreModule.provideStore(reducer),RouterModule.forRoot(routes)...我如何在运行时重新配置其中一个?例如,用户选择两个链接中的一个,并且不同的模块是延迟加载和配置不同的......如何将数据传递给这个新的NgModule?
我能想到的只是把一些东西放在全球范围内并从那里读取,但......感觉不对:)