Angular2 在 ngSwitch 新视图创建后调用自定义函数

2024-03-02

我正在使用创建一个小应用程序Angular2+Ionic2。在这个应用程序中我想初始化google-map into view segment当用户切换到map-segment using ion-segment

以下是示例代码结构:

<ion-navbar *navbar class="hide-navbar">
    <ion-segment [(ngModel)]="homeSegment">
        <ion-segment-button value="list">
            List..
        </ion-segment-button>
        <ion-segment-button value="map" >
            Map
        </ion-segment-button>
    </ion-segment>
</ion-navbar>
<ion-content>
    <div [ngSwitch]="homeSegment" >

        <div *ngSwitchWhen="'map'">
            <div id="googleMap"></div>
        </div>

        <ion-list *ngSwitchWhen="'list'">
           Listing
        </ion-list>
    </div>
</ion-content>

我尝试过提供click听众ion-segment-button,但这并没有成功。前div with id="googleMap"被附加到DOM,添加地图的功能被触发,结果是undefined error.

那么,我们如何理解何时加载新元素ngSwitch发生?最好的方法是什么?

更新(添加js代码)

import {Page, NavController} from 'ionic-angular';
import {DataServiceManager} from '../../services/dataServicesManager';

@Page({
  templateUrl: 'build/pages/listFob/listFob.html'
})
export class ListFob {
    static get parameters(){
        return [[NavController],[DataServiceManager]];
    }
    onPageWillEnter(){
        this.fetchFobs();
    }
    ngOnInit(){
        console.log("on init");
        console.log(this.homeSegment);
    }
    ngAfterContentChecked() {
        console.log("content checked")
    }
    constructor(nav, dataServiceManager){
        this.nav = nav;
        this.dataServiceManager = dataServiceManager;
        this.homeSegment = "list";
    }
    loadMap(){
        console.log(document.getElementById("googleMapAllFobs"));
        // TODO: load map functionality
    }
}

添加指令时出现错误消息

./app/directives/switch-segment.js
Module build failed: SyntaxError: /Users/Piccaza/ionic-projects/learning/fob/app/directives/switch-segment.js: Unexpected token (8:27)
   6 | })
   7 | export class SwitchSegment {
>  8 |     @Output() switchSegment: EventEmitter = new EventEmitter();
     |                            ^
   9 |     ngOnInit() {
  10 |         console.log("Directive triggered!");
  11 |         this.onCreate.emit('dummy');
    at Parser.pp.raise (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:1378:13)
    at Parser.pp.unexpected (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2817:8)
    at Parser.pp.expect (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2811:33)
    at Parser.pp.parseMethod (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:1091:8)
    at Parser.pp.parseClassMethod (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2495:8)
    at Parser.pp.parseClassBody (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2456:10)
    at Parser.pp.parseClass (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2339:8)
    at Parser.pp.parseStatement (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:1813:19)
    at Parser.pp.parseExportDeclaration (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2578:15)
    at Parser.pp.parseExport (/Users/Piccaza/ionic-projects/learning/fob/node_modules/babylon/index.js:2566:29)
 @ ./app/pages/listFob/listFob.js 16:21-63 (CLI v2.0.0-beta.19)

Your system information:

Cordova CLI: Not installed
Ionic Version: 2.0.0-beta.3
Ionic CLI Version: 2.0.0-beta.19
Ionic App Lib Version: 2.0.0-beta.9
ios-deploy version: 1.8.5 
ios-sim version: 5.0.6 
OS: Mac OS X El Capitan
Node Version: v5.3.0
Xcode version: Xcode 7.2.1 Build version 7C1002 

没有内置支持在以下情况下调用函数:ngSwitch添加/删除元素。

我将创建一个在创建时调用该函数的指令(例如在ngOnInit())或发出一个事件处理程序可以绑定到的事件,并将其应用于当事件处理程序添加时添加的组件ngSwitch分支已启用。

If ngSwitch添加一个组件,您也可以在此组件中实现它(取决于您的要求)

update

    <ion-list (onCreate)="doSomething()" *ngSwitchCase="'list'">
       Listing
    </ion-list>
@Directive(selector: '[onCreate]')
export class OnCreate implements OnInit {
  @Output() onCreate:EventEmitter = new EventEmitter();

  ngOnInit() {
    this.onCreate.emit('dummy');
  }
}

笨蛋的例子 https://plnkr.co/edit/2rZAAo?p=preview

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

Angular2 在 ngSwitch 新视图创建后调用自定义函数 的相关文章

随机推荐

  • 替换 PHP 数组键中的子字符串

    假设您有一个像这样的 PHP 数组 来自 mysqli 查询 array user id gt 1 user name gt User user email gt email protected cdn cgi l email protec
  • 将类名添加到 uibinder xml 文件中的元素

    以下内容替换任何当前的 css 类名称 看来是叫setStyleName
  • 如何使用 xquery update 将节点内的文本转换为子节点?

    我有一个 xml 文档 例如
  • 检查模拟对象的类类型

    我正在测试一个方法 该方法获取一个对象并检查该对象是否是存储为实例变量的类的实例 到目前为止没有问题 但在测试中我必须使用模拟 并且这些模拟之一是传递给该方法的对象 而现在 事情变得棘手了 我们看一下代码 我总结了本次测试的代码 Class
  • 如何在VBA中的公式中插入变量

    有人能解决这个问题吗 Sub test Dim i as integer For I 1 to 10 ActiveCell Offset 0 2 Formula Sum E15 i Next I End Sub 你的实际目标不清楚 你可能想
  • 编辑字典列表中的值?

    my dicts key1 value1 key2 value2 key1 value1 key2 value2 key1 value1 key2 value2 将 value2 的所有实例替换为 value3 的最有效方法是什么 我没有做
  • TDE 启用对数据库性能有何影响?

    如果我在数据库上使用透明数据加密 会对数据库性能产生任何影响吗 这会导致数据库索引出现问题吗 有些人已经对此进行了测试 参见here http www databasejournal com features mssql article p
  • 跨行对 Pandas 数据框进行分组

    我有一个这样的csv client1 client2 client3 client4 client5 client6 amount Comp1 4 475000 Comp2 16 305584 Comp3 4 050000 Comp2 Co
  • Android 上的电子邮件活动

    我想从 Android 虚拟机发送电子邮件到我的 Gmail 帐户 问题 但是按下发送按钮后我得到 没有应用程序可以执行此操作 这是我的代码 Intent sendIntent new Intent Intent ACTION SEND s
  • GWT 中自动登录的会话和 Cookie

    我知道已经有很多问题了 但我似乎仍然没有找到明确的答案 我想要做的是让用户在登录两周后或直到他们注销之前被记住 以下是我认为应该发生的事情 我想知道是否有更多经验的人可以告诉我我是对还是错 用户首次登录 对服务器的 RPC 调用返回一个 U
  • 如何发布c# windows应用程序安装程序

    我正在尝试发布 C Windows 应用程序 我尝试安装 Shield 和 Visual Studio 安装程序 但它无法正常工作 此安装程序只能安装在安装了 Visual Studio 的笔记本电脑或 PC 上 谁能帮助我需要什么先决条件
  • 使用 gridsearchcv 的内存泄漏

    Problem 我的情况似乎是运行 gridsearchcv 时出现内存泄漏 当我运行 1 或 32 个并发工作线程 n jobs 1 时 会发生这种情况 以前我在 ubuntu 16 04 上运行过多次 没有出现任何问题 但最近升级到 1
  • 当资源无法调用其他步骤并重试抛出异常的同一步骤时,如何处理 FlatFileItemReader 异常?

    我正在使用 Spring Batch 远程分区 我的第一步为所有其他步骤准备输入文件 其他步骤处理输入文件 要在所有 4 台服务器上创建输入文件 我的第一步应该在所有服务器上运行 因此 我在所有服务器上设置了消费者并发数 1 网格大小 4
  • 从 UICollectionViewCell 呈现 UIPopoverController

    我希望通过 UICollectionViewCell 上的按钮呈现 UIPopoverController 到目前为止 一切都创建正常 但弹出窗口不可见 有什么特殊的方法可以做到这一点吗 如果我从集合视图单元格以外的任何其他位置显示该代码
  • 推荐一些类似于 Bresenham 的二维球面映射算法?

    我需要最快的球体映射算法 就像布雷森纳姆的线条画一样 类似于我在 Star Control 2 旋转行星 中看到的实现 是否有任何已经发明和 或实施的技术 我真的不想重新发明自行车 请帮忙 问题描述 我在 2D 表面上有一个必须出现球体的位
  • “setup”命名空间中没有定义命令:Magento 2

    我已经安装了latest version of Megento 2 前端 后端和功能一切正常 我有一个问题bin magento setup upgrade命令 当我在终端中运行此命令时 我得到以下异常 无效参数异常 setup 命名空间中
  • 使用 UIKitForMac 时“令牌不是预处理器子表达式中的有效二元运算符”

    所以我正在尝试为 mac 编译我的 iOS 项目 当我尝试使用 if targetEnvironment UIKitForMac 我从标题中得到了错误 我尝试将构建目标设置为 iOS 13 但似乎没有任何效果 Objective C if
  • 元素内的“u”属性

    由于我无法搜索到有意义的结果 因此我无法确定这不是重复的 但是 我在网站上运行 JSSOR 滑块 并且某些元素具有 u 属性 例如 div style width 100 height 500px 当我通过 W3 验证器运行此 u slid
  • 是否有 R 函数用于查找向量中元素的索引?

    在 R 中 我有一个元素x和一个向量v 我想找到一个元素的第一个索引v等于x 我知道做到这一点的一种方法是 which x v 1 但这似乎效率太低了 有没有更直接的方法来做到这一点 对于奖励积分 是否有一个功能可以在以下情况下工作 x是一
  • Angular2 在 ngSwitch 新视图创建后调用自定义函数

    我正在使用创建一个小应用程序Angular2 Ionic2 在这个应用程序中我想初始化google map into view segment当用户切换到map segment using ion segment 以下是示例代码结构