注意: 这里有许多不同的答案,大多数都是有效的.事实是,当Angular团队改变其路由器时,有效的改变了很多次.最终将成为 Angular路由器的Router 3.0版本打破了许多这些解决方案,但它提供了一个非常简单的解决方案.从RC.3开始,首选的解决方案是使用[routerLinkActive]如本答案中所示.
在Angular应用程序中(当我写这篇文章时,目前在2.0.0-beta.0版本中),您如何确定当前活动路由是什么?
我正在开发一个使用Bootstrap 4的应用程序,我需要一种方法将导航链接/按钮标记为在<router-output>标记中显示其关联组件时处于活动状态.
我意识到,当点击其中一个按钮时,我可以自己维护状态,但这不会涵盖将多条路径放入同一路径的情况(例如主导航菜单以及主要组件中的本地菜单) ).
任何建议或链接将不胜感激.谢谢.
在Angular 2中将用户重定向到完全外部URL的方法是什么.例如,如果我需要将用户重定向到OAuth2服务器以进行身份验证,我该怎么做?
Location.go(),Router.navigate()并且Router.navigateByUrl()可以将用户发送到Angular 2应用程序中的另一个部分(路由),但我看不出它们如何用于重定向到外部站点?
如何在Angular2中取消订阅?RxJS似乎有一个dispose方法,但我无法弄清楚如何访问它.所以我有代码可以访问EventEmitter并订阅它,如下所示:
var mySubscription = someEventEmitter.subscribe(
(val) => {
console.log('Received:', val);
},
(err) => {
console.log('Received error:', err);
},
() => {
console.log('Completed');
}
);
Run Code Online (Sandbox Code Playgroud)
我mySubscription该如何取消订阅?
我正在使用AngularJS 2 Beta 0,我正在尝试从窗口对象上的事件创建一个RxJS Observable.我相信我知道在我的服务中将事件捕获为Observable的公式:
var observ = Observable.fromEvent(this.windowHandle, 'hashchange');
Run Code Online (Sandbox Code Playgroud)
问题是,每次我尝试运行此代码时,都会收到一条错误消息,指出'fromEvent'不是函数.
Uncaught EXCEPTION: Error during evaluation of "click"
ORIGINAL EXCEPTION: TypeError: Observable_1.Observable.fromEvent is not a function
Run Code Online (Sandbox Code Playgroud)
这似乎意味着我现在没有import正确处理我,因为RxJS没有包含在Angular 2的构建中,尽管我的应用程序的其余部分正常运行,这对我来说意味着RxJS应该是它应该的位置.
我在服务中的导入如下所示:
import {Observable} from 'rxjs/Observable';
Run Code Online (Sandbox Code Playgroud)
虽然我也尝试使用它(对代码进行适当的更改),但结果相同:
import {FromEventObservable} from 'rxjs/observable/fromEvent';
Run Code Online (Sandbox Code Playgroud)
我的Index.html中有以下配置:
<script>
System.config({
map: {
rxjs: 'node_modules/rxjs'
},
packages: {
'app': {defaultExtension: 'js'},
'rxjs': {defaultExtension: 'js'}
}
});
System.import('app/app');
</script>
Run Code Online (Sandbox Code Playgroud)
有人能告诉我我做错了什么吗?
我需要在我的应用中使用亚马逊地图和亚马逊消息.
使用gradle,我没有成功添加具有"提供"范围的Amazon依赖项,因为它们需要:
JAR文件包含Amazon Maps API的存根实现.它不包含Maps API类的实际实现,因此您不应将JAR编译到您的应用程序中.
亚马逊支持提供的解决方案都不适合我.
如果有人成功使用亚马逊地图或亚马逊消息与Gradle,请在此处分享您的build.gradle文件.
我有一个Angular 2应用程序,它使用该ReactiveForms模块来管理使用自定义验证器的表单.验证器接收一个FormControl对象.我有一些输入字段可以使用相同的自定义验证器,只要我知道FormControl传递给验证器时字段的名称.
我找不到任何FormControl公开输入字段名称的方法或公共属性.当然,它很容易看到它的价值.以下显示了我想如何使用它:
public asyncValidator(control: FormControl): {[key: string]: any} {
var theFieldName = control.someMethodOfGettingTheName(); // this is the missing piece
return new Promise(resolve => {
this.myService.getValidation(theFieldName, control.value)
.subscribe(
data => {
console.log('Validation success:', data);
resolve(null);
},
err => {
console.log('Validation failure:', err);
resolve(err._body);
});
});
}
Run Code Online (Sandbox Code Playgroud) 现在Angular2已经完成测试版(2.0.0-RC.0和RC.1于昨天/ 2016年5月3日发布),所有Angular 2都打包用于新的@angular命名空间下的NPM.很多软件包已被移动,现在必须单独安装,正如你在Angular2 CHANGELOG中看到的那样.
但是,CHANGELOG没有解决的一件事是如何找到angular2-polyfills以前可用的捆绑包.
我的beta代码在其中一个TypeScript文件中调用了它:
import 'angular2/bundles/angular2-polyfills';
Run Code Online (Sandbox Code Playgroud)
现在我需要做什么才能使用新的包布局获得相同的功能?
这是ventdor.ts用于导入polyfill 的文件,以便webpack可以包含它:
require('./css/bootstrap.css');
require('./css/main.css');
import 'angular2/bundles/angular2-polyfills'; // THIS NO LONGER WORKS
require('./lib/bootstrap/bootstrap.js');
Run Code Online (Sandbox Code Playgroud)
当我使用webpack构建应用程序时,缺少polyfill导致如下错误:
ERROR in /Users/mfo/Projects/PennMutual/angular2-oauth2/node_modules/@angular/core/src/facade/async.d.ts
(28,45): error TS2304: Cannot find name 'Promise'.
ERROR in /Users/mfo/Projects/PennMutual/angular2-oauth2/node_modules/@angular/core/src/facade/lang.d.ts
(4,17): error TS2304: Cannot find name 'Map'.
ERROR in /Users/mfo/Projects/PennMutual/angular2-oauth2/node_modules/@angular/core/src/facade/lang.d.ts
(5,17): error TS2304: Cannot find name 'Set'.
Run Code Online (Sandbox Code Playgroud) 我有一个设置页面,用户可以在其中保存一些配置变量,例如用户名.用户还可以更改该页面上的用户名.但是当我转到另一个组件(页面)并返回时,用户名不会保存.
我还想在其他组件中显示用户名.我怎么做?有一个全局变量?
结构: - 应用程序 - app.ts(主要) - setting.ts - someOtherComponent.ts
在使用Java 1.7在Windows上启动Sling时,我收到以下错误消息(见下文).我正在使用Sling 6(http://www.apache.org/dyn/closer.cgi/sling/org.apache.sling.launchpad-6-standalone.jar).知道什么可能是错的吗?
上次我尝试在Mac OSX上使用相同的Sling版本并且它工作得很好.
Failed to Start OSGi framework
org.osgi.framework.BundleException: Uncaught Instantiation Issue:
java.lang.ArrayIndexOutOfBoundsException: -1
at
org.apache.sling.launchpad.base.impl.Sling.<init>(Sling.java:245)
at
org.apache.sling.launchpad.base.app.MainDelegate$1.<init>(MainDelegate.java:159)
at
org.apache.sling.launchpad.base.app.MainDelegate.start(MainDelegate.java:159)
at org.apache.sling.launchpad.app.Main.startSling(Main.java:244)
at org.apache.sling.launchpad.app.Main.<init>(Main.java:107)
at org.apache.sling.launchpad.app.Main.main(Main.java:56)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at
org.apache.felix.framework.BundleImpl.getCurrentModule(BundleImpl.java:1046)
at
org.apache.felix.framework.BundleImpl.getSymbolicName(BundleImpl.java:863)
at
org.apache.sling.launchpad.base.impl.SlingFelix.getSymbolicName(SlingFelix.java:32)
at org.apache.felix.framework.Felix.toString(Felix.java:1012)
at org.apache.felix.framework.Logger.doLog(Logger.java:128)
at org.apache.felix.framework.Logger._log(Logger.java:181)
at org.apache.felix.framework.Logger.log(Logger.java:114)
at
org.apache.felix.framework.ExtensionManager.<init>(ExtensionManager.java:201)
at org.apache.felix.framework.Felix.<init>(Felix.java:374)
at
org.apache.sling.launchpad.base.impl.SlingFelix.<init>(SlingFelix.java:39)
at
org.apache.sling.launchpad.base.impl.Sling.<init>(Sling.java:235)
Run Code Online (Sandbox Code Playgroud) 我正在使用Node.js和Express编写的应用程序,我正在尝试使用Stomp.js客户端连接到ActiveMQ服务器.
我可以使用Stomp将应用程序连接到ActiveMQ,但我无法让系统在连接失败时自动重新连接.似乎只有在连接最初成功然后被切断时才调用失败函数,但是如果在Node应用程序启动时ActiveMQ已经关闭,我确实看到了证明失败函数被调用的错误消息.
var Stomp = require('stompjs');
var stompClient = Stomp.overTCP('localhost', 61612);
var stompStatus = false;
var stompSuccessCallback = function (frame) {
stompStatus = true;
console.log('STOMP: Connection successful');
};
var stompFailureCallback = function (error) {
stompStatus = false;
console.log('STOMP: ' + error);
setTimeout(stompConnect, 10000);
console.log('STOMP: Reconecting in 10 seconds');
};
function stompConnect() {
console.log('STOMP: Attempting connection');
stompClient.connect('login', 'password', stompSuccessCallback, stompFailureCallback);
}
stompConnect();
Run Code Online (Sandbox Code Playgroud)
有没有人知道这里发生了什么?