我有一个父组件,它通过服务从服务器获取数据.我需要将一些数据传递给Child组件.
我一直试图通过常规传递这些数据,@Input()
但正如我所期望的那样,我在Child组件中得到的数据是undefined
.
例
父组件
@Component({
selector: 'test-parent',
template: `
<test-child [childData]="data"></test-child>
`
})
export class ParentComponent implements OnInit {
data: any;
ngOnInit() {
this.getData();
}
getData() {
// calling service and getting data
this.testService.getData()
.subscribe(res => {
this.data = res;
});
}
}
Run Code Online (Sandbox Code Playgroud)
子组件
@Component({
selector: 'test-child',
template: `
<!-- Content for child.... -->
`
})
export class ChildComponent implements OnInit {
@Input() childData: any;
ngOnInit() {
console.log(childData); // logs undefined
}
}
Run Code Online (Sandbox Code Playgroud)
我保持简单的例子,以显示我正在尝试做的事情.我的问题是,在初始化之后是否可以将数据传递给孩子.我不确定,但在这种情况下,双向数据绑定会有帮助吗?
更多调查
根据发布的答案,我尝试使用 …
我正在尝试在我的Android应用程序中实现一个简单的活动,其中要求用户通过Facebook登录,以便检索用户的"喜欢".所以很明显我首先通过Facebook测试一个简单的登录.我正在使用"Facebook SDK for Android入门"中的确切代码 - 步骤6(https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/)但由于某种原因,它不起作用.当我调试代码时,我意识到以下情况:
if(session.isOpen())
Run Code Online (Sandbox Code Playgroud)
即使我已经登录到Facebook,也总是返回false.我已经尝试了一切来修复它,但似乎没有任何工作.
有人有这个问题或知道如何解决它?
编辑:我正在手机上尝试这个测试而不是在模拟器上.我不知道这是不是一个问题.
提前致谢!
我确实试过这个解决方案session.isOpened()返回false,即使成功登录到Facebook但使用java 6或7仍然提供相同的哈希键.
编辑2:我也尝试了同样的事情,但方法略有不同.http://sonyarouje.com/2011/09/18/facebook-hash-key-for-android-apps/我仍然遇到同样的问题.该session.isOpen()方法总是返回false.
编辑3:这是我尝试过的最新代码.我不认为logcat中有任何错误.无论如何,我会把它链接到这里以防万一我错过了什么.
package com.example.danandroidapp;
import java.util.Arrays;
import com.facebook.FacebookException;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
import com.facebook.widget.LoginButton.OnErrorListener;
import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
private String TAG = "MainActivity";
private TextView lblEmail;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个接受多个模板作为输入的组件.这是我的例子:
@Component({
selector: 'data-list',
styles: [
require('./data-list.component.scss')
],
template: `
<ng-template
*ngFor="let item of itemsData"
ngFor let-item [ngForOf]="[item]" [ngForTemplate]="itemTemplate"
></ng-template>
`
})
export class DataListComponent {
@Input() itemsData: any[];
@ContentChild(TemplateRef) itemTemplate: TemplateRef<ElementRef>;
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,这是一个我正在尝试的相当简单的组件.该组件只接受要显示的项目的数据以及项目的模板.这个组件可以像这样使用:
<data-list [itemsData]="data">
<ng-template let-item>
<h1>{{ item.header }}</h1>
<div>{{ item.content }}</div>
</ng-template>
</data-list>
Run Code Online (Sandbox Code Playgroud)
如上图所示,我正在传递模板ng-content
,然后由DataListComponent
with 读取@ContentChild(TemplateRef) itemTemplate: TemplateRef<ElementRef>;
.
我的问题是是否可以将多个模板传递给组件.
作为示例,可以传递项目的模板,但是如果它是第一项,则需要不同的模板.这意味着将对第一个项目进行检查,DataListComponent
然后使用组件使用它指定的模板.
简单的例子:
我可以做这样的事情来迎合这个:
@Component({
selector: 'data-list',
styles: [
require('./data-list.component.scss')
],
template: `
<span *ngFor="let item of itemsData; let i = index" …
Run Code Online (Sandbox Code Playgroud) 从桶中导入服务时,我遇到了依赖注入的问题(https://angular.io/docs/ts/latest/glossary.html#!#barrel).
我遇到的问题是:
使用Angular指南,在应用程序中有一个核心桶,然后是每个文件夹的桶,这些是通过在每个文件夹中有一个index.ts来实现的.核心index.ts引用每个文件夹中的所有内容,然后每个文件夹引用特定文件.
核心指数
...
export * from './test/index';
Run Code Online (Sandbox Code Playgroud)
测试index.ts
...
export * from './my-service.service';
Run Code Online (Sandbox Code Playgroud)
码
import { MyService } from '../../core';
...
@Injectable()
export class AuthGuard implements CanActivate {
isValidSession: boolean = false;
errorMessage: any;
constructor(
private myService: MyService
) { }
canActivate(
// Not using but worth knowing about
next: ActivatedRouteSnapshot,
state: RouterStateSnapshot
) {
return this.myService.doSomething();
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码导致以下错误:
Uncaught Cannot resolve all parameters for 'AuthGuard'(undefined). Make sure that all the parameters are decorated with …
我知道关于这个问题有无数的问题,但无论我尝试过什么,我都没有运气.我遇到的问题是关于使用NetBeans和XDebug时的断点(在Windows 8.1上,如果这会影响任何事情).
问题是没有断点正常工作.默认情况下,在使用NetBeans进行调试时,它会在第一行停止,并且会成功执行此操作.因此,NetBeans以某种方式连接到XDebug.但是,任何其他文件中的任何其他断点都不起作用.
我已经在php.ini文件中尝试了各种不同的设置但到目前为止没有运气.我也试过打开XDebug日志文件,这样我也许可以分析一下发生了什么,但这也行不通.最后我尝试设置断点xdebug_break()
,但也没用.
php.ini中的XDebug设置
;[XDebug]
; Only Zend OR (!) XDebug
zend_extension="C:\xampp\php\ext\php_xdebug.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\xampp\tmp"
Run Code Online (Sandbox Code Playgroud)
NetBeans上的项目运行配置
我已经看过以下内容:
另请注意,这是在3天前工作,但今天没有断点正常工作.
附加信息
我在cmd中运行以下命令,php -v
并显示以下警告:
Warning: Module 'xdebug' already loaded in Unknown on line 0
这是否意味着xdebug试图加载两次?如果是这样,我不确定如何解决这个问题
我是Angular 2和Observables的新手,所以如果我的问题很简单,我会道歉.无论如何,我正在尝试使用RxJS测试Angular 2 HTTP客户端.虽然我让它工作,但我需要为我正在处理的服务添加更多逻辑.基本上我想要一个映射函数将我从我连接的Web服务接收的对象转换为我在Angular中的模型对象.
这是有效的代码:
import { Injectable } from 'angular2/core';
import { Http, Response } from 'angular2/http';
import { Observable } from 'rxjs/Observable';
import { Person } from '../models/person';
@Injectable()
export class PersonsService {
constructor(private http: Http) { }
private personsUrl = 'http://localhost/api/persons';
getPersons(): Observable<Person[]> {
return this.http.get(this.personsUrl)
.map(this.extractData)
.catch(this.handleError);
}
private extractData(res: Response) {
if(res.status < 200 || res.status >= 300) {
throw new Error('Bad response status ' + res.status);
}
let body = res.json();
return body.data || …
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置一个Angular 2应用程序来使用Microsoft的SignalR.我一直在关注这个教程,虽然它很好但我不喜欢jQuery和SignalR通过index.html文件中的脚本标签加载到应用程序中的事实,以及两个库都不使用它们各自的类型这一事实定义.
因此,考虑到这一点,我一直在尝试使用节点模块和相应的类型定义在我的应用程序中包含jQuery和SignalR.我搜索了正确的类型定义文件,以便通过Microsoft的TypeSearch使用.
我只在我的应用程序中包含jQuery,因为SignalR依赖于jQuery.
jQuery的
我首先开始在我的应用程序中安装jQuery模块,我必须在Webpack配置中添加它.在此之后,由于量角器,我面临着一个"冲突"问题.这在Aurelia JS Rocks的网站上有所描述.虽然它建议卸载量角器类型,但我尝试了另一种解决方案,现在在这个答案中描述.我不知道这是否是最佳解决方案.
SignalR
关于SignalR,我有点卡住了 - 到目前为止,似乎没有为SignalR提供"官方"节点模块.我不确定是否应该通过下载文件并将其包含在我的应用程序中来包含Microsoft的SignalR Javascript库.
问题是我已经安装了SignalR的类型定义.但是现在我不确定如何实际使用SignalR,因为当我输入$
或者jQuery
我没有被建议时.connections
- 这是有意义的,因为这不是jQuery库的一部分.
我确信我可能会误解一些关于"设置"的问题.在Angular2 TypeScript应用程序中使用SignalR的最佳方法是什么?
我需要一个简单的自动完成搜索功能,但也允许用户键入多个值.我正在使用jQuery UI的自动完成小部件(http://jqueryui.com/autocomplete/),到目前为止,我已将源设置为仅搜索建议中的第一个字母.我现在想要添加的是用户从同一文本框中搜索多个项目的能力.(即再次显示逗号建议后)
我一直试图搜索如何做到这一点.我唯一能找到的是可以添加的选项multiple: true
(http://forum.jquery.com/topic/multiple-values-with-autocomplete).事情是它甚至没有在文档中列出,所以我不知道该选项是否已经改变或不再存在.
这是我的代码:
var items = [ 'France', 'Italy', 'Malta', 'England',
'Australia', 'Spain', 'Scotland' ];
$(document).ready(function () {
$('#search').autocomplete({
source: function (req, responseFn) {
var re = $.ui.autocomplete.escapeRegex(req.term);
var matcher = new RegExp('^' + re, 'i');
var a = $.grep(items, function (item, index) {
return matcher.test(item);
});
responseFn(a);
}
});
});
Run Code Online (Sandbox Code Playgroud)
我尝试了什么:
var items = [ 'France', 'Italy', 'Malta', 'England',
'Australia', 'Spain', 'Scotland' ];
$(document).ready(function () {
$('#search').autocomplete({
source: function (req, …
Run Code Online (Sandbox Code Playgroud) 我正在使用Angular 4 Animations在按钮上测试一个简单的淡入/淡出动画.我遇到的问题是因为我使用布尔值没有触发任何东西.从开发工具看起来,类似于.ng-animating
添加到元素中,但没有任何更改.
这是我的代码示例:
@Component({
selector: 'fade-btn-test',
styles: [
require('./fade-btn-test.component.scss')
],
template: `
<button [@test]="isActive" (click)="isActive = !isActive">My Button</button>
`,
animations: [
trigger('test', [
state('true', style({ opacity: 0 })),
state('false', style({ opacity: 1 })),
transition('0 <=> 1', animate(500))
])
]
})
export class FadeBtnTestComponent {
isActive: boolean = false;
}
Run Code Online (Sandbox Code Playgroud)
我知道上面的代码曾用于Angular 2,但是在这种情况下它不起作用.我发现的唯一解决方案是使用a string
而不是a boolean
.
@Component({
selector: 'fade-btn-test',
styles: [
require('./fade-btn-test.component.scss')
],
template: `
<button [@test]="isActive.toString()" (click)="isActive = !isActive">My Button</button>
`,
animations: [
trigger('test', [
state('true', style({ …
Run Code Online (Sandbox Code Playgroud) 只是一个关于两个 Lifecycle HooksOnInit
和 的一般问题OnDestroy
。正如本文提到的,我一直假设OnInit
始终 在.OnDestroy
我有一个例子,ngOnDestroy()
我正在停止播放背景音乐。该声音已加载组件的ngOnInit()
,并且由于ngOnDestroy()
正在运行而未ngOnInit()
运行声音对象undefined
。
代码
ngOnInit() {
...
this.loadSounds();
...
}
ngOnDestroy() {
if (AppSettings.SOUNDS_ENABLED) {
this.soundService.getSound(Sound.MINI_GAME_BG_MUSIC).fade(0.2, 0, 1500);
}
}
private loadSounds() {
this.soundService.loadSound(Sound.MINI_GAME_BG_MUSIC, SoundPathURL.MINI_GAME_BG_MUSIC, true, 0);
}
Run Code Online (Sandbox Code Playgroud)
目前,当ngOnDestroy
尝试发出.fade()
的声音时,代码失败undefined
。undefined
当然,我可以通过在执行函数之前检查声音是否存在来轻松解决此问题.fade()
。我的假设是,如果ngOnDestroy()
运行了,ngOnInit()
那么也必须运行 - 我想我错了。
现在,由于这种情况,我认为在ngOnDestroy()
我的应用程序中的每个应用程序中,我应该在执行任何操作之前检查正在使用的对象是否是undefined
。因此,例如,在取消订阅之前,我应该检查订阅是否为undefined
,等等。
我这样的假设正确吗?