与作为输入

时间:2016-06-21 20:48:46

标签: javascript typescript angular

(为了节省一些阅读 - 在引用@Input'ed变量时,问题归结为缺少'this')

我有一个父类 - 这将(最终)显示一个“QuestionComponents”列表。

父类模板的相关部分如下:

<question [(justText)]="testText"  [(justObj)]="testObj" [(myQuestion)]="singleQuestion"></question>

只需说我从http服务调用中获取“singleQuestion”对象即可。 Question类,其中“singleQuestion”是一个实例,有一个基本的“toString”方法,以便于输出调试。

正如我测试的那样,testText,textObj和singleQuestion都是我日益复杂的对象。现在,这是非常基本的,只有一个“问题”,因为我的理解。

孩子“QuestionComponent”如下所示:

@Component ({
    selector:
        'question',
    templateUrl:
        './app/components/question/question.component.html',
    directives: [FORM_DIRECTIVES],

})


export class QuestionComponent {

    @Input() myQuestion:USGSQuestion
    @Input() justText:string
    @Input() justObj:object

     constructor() {

    }

    onClick() {
        myQuestion.generalInfo.label = "changed";
        console.log("change attempted");
    }
}

请注意,随着时间的推移,我需要能够与传递给QuestionComponent的对象进行一些繁重的交互。实际上,我的偏好是只将Question对象传递给构造函数,但是将数据传递给组件构造函数似乎不会出于某种原因。 (我离题)为了尝试检查我如何与传递的数据进行交互,我构建了onClick按钮并尝试更改其中一个@Input'ed变量。

子对象的模板如下:

<div *ngIf="!justText">
    no text passed
</div>
<div *ngIf="justText">
    <b>Here is the passed Text:</b><br>
     {{justText}} <br>
</div>
<br>
<div *ngIf="!justObj">
    no obj passed
</div>
<div *ngIf="justObj">
    <b>Here is the passed JSON:</b><br>
     Foo: {{justObj.foo}} <br>
     Baz: {{justObj.baz}}
</div>
<br>
<div class="question">
    <i>I am a question spot</i>

    <div *ngIf="!myQuestion">
        Loading Question...
    </div>
    <div *ngIf="myQuestion">
        <b>Here is the passed question:</b><br>
         {{myQuestion}} <br>
    </div>
</div>

<button (click)="onClick()">Clickit</button>

如何获取类中@Input'ed对象的引用? (在这种情况下,我如何修改'onClick()'函数中的“myQuestion”?...其次,我如何确保将对象的更改传递给视图并更新?

我应该注意到我已经尝试通过onClick调用从'view'传递值,如下所示: (将按钮更改为:)

<button (click)="onClick(myQuestion)">Clickit</button>

(并将onClick更改为:)

onClick(q) { q.generalInfo.label = "changed"; }

这不起作用。

1 个答案:

答案 0 :(得分:1)

我是个白痴。

经过几个小时的研究和搜索(在询问之前),所有这些都归结为添加“这个”。

...与"myQuestion.generalInfo.label = "changed";"一样"this.myQuestion.generalInfo.label = "changed";"

有些日子你一定喜欢编程,嗯?