我有一个应该更改app.componant成员的警卫服务。 为此,我在app.componant创建了一个setter。这个setter应该由guard-service执行。我想通过输入和输出实现这一点。
import { Component, Injectable, Output } from '@angular/core';
@Injectable()
export class AppComponent {
headerEnabled = true;
@Output()
changeHeaderEnable(b: boolean) {
this.headerEnabled = b;
}
}
如果该方法有效,我需要在我的AppComponant中使用方法changeHeaderEnable(),并将@Output()作为装饰器:
#include <iostream>
using namespace std;
template <typename T> struct Node{
T value;
Node * ptr;
};
template <typename T> class LinkedList {
public:
LinkedList(const T & element);
T & push(const T & element);
T & pop(const int index);
int get_size() const { return this->_size; }
void printll();
private:
LinkedList(){};
struct Node<T> * head;
int _size;
};
template <typename T> LinkedList<T>::LinkedList(const T & element){
struct Node<T> new_node;
new_node.value = element;
new_node.ptr = nullptr;
this->head = &new_node;
this->_size = 1;
}
template <typename T> void LinkedList<T>::printll(){
if(this->head != nullptr){
Node<T> * temp = this->head;
while((*temp).ptr != nullptr){ // Error here.
cout << (*temp).value << " ";
temp = temp->ptr;
}
cout << (*temp).value << endl;
cout << endl;
}else {
cout << "The list is empty!" << endl;
}
}
int main(int argc, char** argv){
LinkedList<int> l1(5);
l1.printll();
return 0;
}
我将两个组件都缩减为重要内容。 现在我希望每次我链接到一个不同的路由,其中AuthGuardService作为一个后卫,canActivate()应该执行。但每当我链接到另一台路由器时,我都会收到以下错误:
错误错误:未捕获(在承诺中):TypeError:无法读取属性&#39; changeHeaderEnable&#39;未定义的
为什么在我的警卫服务中未定义changeHeaderEnable?我错了什么?
答案 0 :(得分:1)
装饰器@Input和@Output用于父组件和子组件之间的属性绑定。您不能像在服务中那样在服务中使用它们。它们依赖于变化检测,这仅适用于组件和指令。
老实说,提供的代码存在很多问题。我看到你还用@Injectable而不是@Component装饰你的app.component,这是另一个大问题。默认情况下,所有组件(和指令)都是可注入的。
如果您还没有完成Angular教程,我建议您完成: Angular Tutorial