从子 @Input setter 访问提供者方法 - Ionic2 / Angular2

2024-02-11

我正在尝试从我的组件访问提供程序类@Input方法。然而,当@Input方法被称为

以下是我的代码

#provider
import { Injectable } from '@angular/core';
import 'rxjs/add/operator/map';


@Injectable()
export class MyProvider {

  constructor() {}

  sampleMethod(){
    return 'sample method';
  }
}

#component
import { Component, Input } from '@angular/core';
import {MyProvider} from '../../providers/my-provider/my-provider';
import { NavController} from 'ionic-angular';

@Component({
  selector: 'selected-options',
  templateUrl: 'build/components/selected-options/selected-options.html',
  inputs: ['node']
})
export class SelectedOptions {

  provider: MyProvider;

  @Input()
  set node(n: any){
     this.provider.sampleMethod();    
  }
}

#page (where I call the component) 
<selected-options [node]="node.Name"></selected-options>

所以问题出在线路上

this.provider.sampleMethod();

我收到的错误是ORIGINAL EXCEPTION: TypeError: Cannot read property 'sampleMethod' of undefined.

所以我相信provider: MyProvider;未加载时@Input方法被调用。但如果我在构造函数中使用它,效果很好。 我如何访问内部的提供者方法@Input method?


这可能听起来令人困惑,但您得到的错误是因为提供程序没有作为参数包含在构造函数中(因此,您的构造函数没有创建MyProvider class).

请看一下这个笨蛋 https://plnkr.co/edit/bToHqJ?p=preview。就像你可以在那里看到的那样,即使我们使用myProvider实例中的@Inputsetter拦截器,构造函数已经创建了服务的实例,所以你可以调用sampleMethod()没有什么问题。

import { Component, Input } from "@angular/core";
import { MyProvider } from './my-provider.ts';

@Component({
  templateUrl:"child.html",
  selector: 'child-selector',
  inputs: ['node']
})
export class ChildPage {

  private result: string;

  @Input()
  set node(node: string){
    // Because the provider instance is injected on the constructor, we can
    // call the sampleMethod() here
    node = node + ' from ChildPage';
    this.result = this.myProvider.sampleMethod(node);
  }

  // Injects an instance of the MyProvider class
  constructor(private myProvider: MyProvider) {

  }
}

所以如果你只是添加private myProvider: MyProvider构造函数中的参数您的代码应该可以正常工作:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从子 @Input setter 访问提供者方法 - Ionic2 / Angular2 的相关文章

随机推荐

  • 类在目标中被链接多次

    我有两个目标app and appTests 我也有课Wine和框架Realm和 RealmSwift 它们链接到这两个目标 当我使用类时也不例外Wine在目标中app 但是当我想运行测试时 appTests swift 22行 impor
  • 如何销毁由 resque 工作人员排队的工作?

    我在 Rails 3 项目上使用 Resque 来处理计划每 5 分钟运行一次的作业 我最近做了一些事情 使这些工作岗位的创造如滚雪球般增长 目前该堆栈已达到 1000 多个工作岗位 我修复了导致许多作业排队的问题 现在我遇到的问题是由错误
  • ReferenceError:ReactJS Build 中未定义 localStorage

    我在 React 应用程序中的经过身份验证的组件上大量使用 localStorage 以从本地存储获取用户详细信息并在登录时存储它们 当我构建我的应用程序时 它会抛出ReferenceError localStorage is not de
  • RxJava API 和 Java 9 Flow API 之间的区别

    在过去几个主要版本的 Java 的每次迭代中 似乎都有一致的新方法来管理并发任务 在 Java 9 中 我们有Flow API https docs oracle com javase 9 docs api index html java
  • R dplyr mutate_at 访问 colnames

    如何访问正在处理的列名dplyr mutate at 假设我们想要将数据框的列转换为因子 其级别存储在单独的列表中 df lt data frame C1 c A B C C2 c D E F df C1 C2 1 A D 2 B E 3
  • suffix(from:) 和 dropFirst(_:) 之间有什么区别吗?

    我突然想到 在 Swift 中处理子序列时 func suffix from Int 似乎与刚才相同dropFirst 显然 对于长度为 10 的数组 只需将输入值从 3 更改为 7 即可 只是重复一遍 所以 当然 对于一系列的说法长十 我
  • Python 中 switch/case 的语法等价物是什么? [复制]

    这个问题在这里已经有答案了 Programming languages like C C C Java JavaScript and Pascal Reference https en wikipedia org wiki Switch s
  • 删除 Github 上使用 提交的

    我在 github 上有一些提交 如下所示 有没有一种方法可以重新设置基准 以便我可以摆脱这个问题并简单地将提交标记为由我标记 首先我会检查你的 git 是否配置了正确的用户信息 跑步git config list以验证一切是否正确 您还可
  • 自动部署到 F5 负载平衡环境

    我们目前正在使用 TeamCity 进行 CI 构建 并且我们也在尝试设置自动化部署 我当前尝试部署的项目是位于 F5 负载均衡器下的 Windows 服务 将来 我们还希望自动化部署同样位于 F5 下的 IIS 网站 从 TeamCity
  • jquery mobile 外部面板不采用样式

    我正在尝试实现 jQuery mobile 1 4 rc1 中提供的新外部面板 我能够让面板按其应有的方式在所有页面上输入和关闭 但是面板不会继承默认主题 c 的样式 如果使用 data theme a 定义主题也不会继承样式 面板将加载无
  • 从剪贴板保存图像

    我想将 winrt 中剪贴板内的一张图像保存到文件中 但我没有找到办法 你能帮忙吗 var dataPackage Clipboard GetContent var t await dataPackage GetBitmapAsync va
  • 使用 jquery 的 ajax 调用中未设置 HTTP_X_REQUESTED_WITH

    我正在使用 Django 开发一个新网站 我遇到了 ajax 请求的问题 我一直在谷歌上搜索并阅读了很多帖子和文章 大多数都解释相同 问题 ajax 调用已执行 我在视图中收到了请求 但 request is ajax 返回 false 据
  • Vagrant、VirtualBox - 找不到适配器?

    输入 vagrant up 时获取以下日志转储 已尝试在 VirtualBox 上没有任何混乱 并且还手动添加端口转发规则 主机 IP 127 0 0 1 主机端口 2222 访客端口 22 Bringing machine polecat
  • OpenCV.js - 检测MultiScale“无法捕获此异常”

    我正在尝试通过 OpenCV js 使用面部识别 但是当我调用detectMultiScale 的方法CascadeClassifier对象我收到错误 未捕获 6446128 异常捕获已禁用 无法捕获此异常 使用 s DISABLE EXC
  • 使用 Spring Profile 加载 util:properties 会导致 ID 多次出现

    我正在使用 Spring 3 1 配置文件通过 util properties 加载属性文件
  • 如何重启BluetoothLeScanner?

    我正在使用 Android 端的 BluetoothLeScanner 将 Android 设备连接到 iOS 第一次一切都完美无缺 问题是 在我连接到其中一台已发现的 iOS 设备后 我停止扫描 stopScan scanCallback
  • 如何将集合转换为 pandas 中的列表? [复制]

    这个问题在这里已经有答案了 我有这样的数据 name SF a 1 23 4 5 b 1 3 43 5 c 1 23 24 5 d 1 23 54 15 我想让SFset to list我期望的输出是 name SF a 1 23 4 5
  • 单一责任原则的例子是什么? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有人可以给我一个单一责任原则的例子吗 我试图理解在实践中 一个班级承担单一责任意味着什么 因为我担心我可能每天都会违反这条规则 破坏应
  • 在 AWS Lambda 上使用层时“无法从 'urllib3.util.ssl_' 导入名称 'DEFAULT_CIPHERS'”

    我想要实现什么 使用 AWS Lambda 抓取网站并将数据保存在 S3 上 我遇到的问题 当我执行 Lambda 时 出现以下错误消息 errorMessage 无法导入模块 lambda function 不能 从 urllib3 ut
  • 从子 @Input setter 访问提供者方法 - Ionic2 / Angular2

    我正在尝试从我的组件访问提供程序类 Input方法 然而 当 Input方法被称为 以下是我的代码 provider import Injectable from angular core import rxjs add operator