标签: angular2-directives

Angular2,TypeScript,如何读取/绑定属性值到组件类(在ngOnInit中未定义)

有人可以请教我如何读取/绑定属性值到@component类,这似乎是在ngOnInit方法中未定义?

这是一个有趣的演示:http://plnkr.co/edit/4FoFNBFsOEvvOkyfn0lw?p = preview

我想读取"someattribute"属性的值

<my-app [someattribute]="'somevalue'">
Run Code Online (Sandbox Code Playgroud)

在App类(src/app.ts)ngOninit方法中.

谢谢!

typescript angular2-directives angular2-template angular

18
推荐指数
3
解决办法
4万
查看次数

在angular2中全局注册指令

我正在开发一个Angular2应用程序.我需要为所有链接添加特殊行为,所以在角度1.xi中只会写一个这样的指令:

angular.module('whatever.module', []).directive('href', function() {
    return {
        restrict: 'A',
        link: function($scope, $element, $attrs) {
            // do stuff
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

在angular2中,我可以编写如下指令:

@Directive({
    selector: '[href]',
})

export class MyHrefDirective {
    constructor() {
        // whatever
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我怎么能告诉应用程序全局使用该指令呢?我有很多关于它们的链接的观点.我是否必须导入它并directives在每个组件中的数组中指定它(这是很多)?

我尝试将它注入到bootstrap函数中,就像你应该使用服务来全局拥有一个实例但是没有用

angularjs angular2-directives angular

17
推荐指数
1
解决办法
4986
查看次数

基于条件的一个组件多个模板

所以这是交易.我有一个非常好的组件,并在很多地方使用.现在我需要使用相同的组件,但希望根据条件呈现不同的模板.

我尝试了很多.

1)尝试使用多个组件装饰器 - 没有运气

2)尝试了多层次的抽象,我最终创造了更多的组件 - 糟糕的主意

3)可以逐字复制整个组件,只需更改选择器和模板 - 坏主意

4)目前我正在尝试这个:

<div *ngIf="!isWizard">
    <ul class="nav" role="tablist">
        <ng-content select="tab-link"></ng-content>
    </ul>
    <ng-content select="tab-content"></ng-content>
</div>


<div *ngIf="isWizard">
    <nav class="nav-panel sidenav">
        <ng-content select=".wizard-title"></ng-content>
            <ul class="nav" role="tablist">
                <ng-content select="tab-link"></ng-content>
            </ul>

    </nav>

    <main class="settings-panel content-area">
        <ng-content select="tab-content"></ng-content>
    </main>

</div>
Run Code Online (Sandbox Code Playgroud)

我将isWizard属性设置为true/false.现在的问题是,ng-content只运行一次.因此,当isWizard为true时,即使显示div块,ng-content也不会运行(导致它在上面的块中运行).

5)而不是使用ngIf我也尝试过ngSwitch - 没有用

我现在很绝望.请帮忙 :)

angular2-directives angular2-template angular

17
推荐指数
1
解决办法
2万
查看次数

如何在Angular 2 App中包含moment-timezone

我意识到,这个问题是重复但前一次没有提供适当的答案时刻包已经安装

1.安装包裹

npm install moment-timezone --save

node_modules目录中
|
| --moment
| --moment-timezone

目录存在

2. Index.html包含脚本

<script src="node_modules/moment-timezone/moment-timezone.js"></script>
Run Code Online (Sandbox Code Playgroud)

System.config.js

  var map = {
    'moment':             'node_modules/moment',
    'momentzone':         'node_modules/moment-timezone'
  };
  var packages = {
    'moment':             { defaultExtension: 'js' },
    'momentzone':         { defaultExtension: 'js' }
  };
Run Code Online (Sandbox Code Playgroud)

3.Inside component.ts文件

import * as moment from 'moment/moment';

export class TimeComponent implements OnInit{
   ngOninit(){
         console.log(moment("2014-06-01T12:00:00Z").tz('America/Los_Angeles').format('ha z'));

   }
}
Run Code Online (Sandbox Code Playgroud)

应该导入什么来防止错误 属性tz在"Moment"类型上不存在

node.js angular-moment angular2-directives angular

17
推荐指数
3
解决办法
3万
查看次数

Angular 2使用FileSaver.js的最佳方法

我需要在Angular2应用程序中使用FileSaver.js(https://github.com/eligrey/FileSaver.js/).

我知道我可以在主html页面中将其添加为脚本文件,它将起作用.但是我想知道在Angular 2(TypeScript)应用程序中最好的方法是什么,这样我就可以调用window.saveAs来保存文件.

filesaver.js angular2-directives angular2-services angular

17
推荐指数
2
解决办法
3万
查看次数

如何将jQuery导入Angular2 TypeScript项目?

我想在Angular2指令中包含一些jQuery代码.

我使用以下命令将Typings的jQuery库安装到我的项目中:

typings install dt~jquery --save --global

所以现在我的项目目录中有jquery文件夹下的typings/global文件夹.此外,我的typings.json文件中添加了以下新行:

{
    "globalDependencies": {
        "core-js": "registry:dt/core-js#0.0.0+20160602141332",
        "jasmine": "registry:dt/jasmine#2.2.0+20160621224255",
        "node": "registry:dt/node#6.0.0+20160807145350",
        "jquery": "registry:dt/jquery#1.10.0+20160908203239"
    }
}
Run Code Online (Sandbox Code Playgroud)

我开始编写一个新的Angular2指令(我导入到app-module文件中),但我不知道如何正确导入jQuery库.这是我的源文件:

import {Directive} from '@angular/core';

@Directive({
    selector: "my-first-directive"
})

export class MyFirstDirective {
    constructor() {
        $(document).ready(function () {
            alert("Hello World");
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不能使用,也不$也不是jQuery.你下一步怎么做?

jquery typescript angular2-directives typescript-typings angular

16
推荐指数
2
解决办法
4万
查看次数

Angular 4无法绑定到<property>,因为它不是<component>的已知属性

我正在尝试在Angular 4中创建自己的指令.但是,当将类的属性绑定到组件模板时,我得到了这个错误.

控制台错误:

Unhandled Promise rejection: Template parse errors: Can't bind to
'data' since it isn't a known property of 'tree'. ("<tree [ERROR
->][data]="data"></tree>"):
Run Code Online (Sandbox Code Playgroud)

我的tree-view-component.ts:

@Component({
    selector: 'app-tree-view',
    template: '<tree [data]="data"></tree>'
})
export class TreeViewComponent implements OnInit {

    @Input() data: any[];

    constructor() {
        this.data = [
        {
            label: 'a1',
            subs: [
                {
                    label: 'a11',
                    subs: [
                        {
                            label: 'a111',
                            subs: [
                                {
                                    label: 'a1111'
                                },
                                {
                                    label: 'a1112'
                                }
                            ]
                        },
                        {
                            label: 'a112'
                        }
                    ]
                },
                {
                    label: 'a12', …
Run Code Online (Sandbox Code Playgroud)

typescript angular2-directives angular

16
推荐指数
2
解决办法
3万
查看次数

如何手动触发更改事件 - angular2

鉴于以下组件:

@Component({
    selector: 'compA',
    template:  template: `<compB [item]=item></compB>`
})
export class CompA {
    item:any;
    updateItem():void {
        item[name] = "updated name";
    }
}

@Component({
    selector: 'compB',
    template:  template: `<p>{{item[name]}}</p>`
})
export class CompB implements OnInit{
    @Input() item: any;
    someArray: any[];

    ngOnInit():void {
        someArray.push("something");
    }
}
Run Code Online (Sandbox Code Playgroud)

据我所知,除非item更改完整对象,否则angular2无法识别更改item.因此,我想itemupdateItem调用方法时手动发出更改事件.然后,使子组件CompB重新渲染,就像角度检测到常规方式的变化一样.

目前,我所做的是通过链接实现ngOnInitfor方法CompB并在方法内调用该方法.故事的另一部分是我的实际来源有像我想在每个渲染中重置的对象.我不确定重新渲染重置.目前,我正在重置它们的方法.updateItemViewChildsomeArraysomeArrayngOnInit

所以,我的问题是:如何触发对父对象的更深层元素的更改进行重新渲染?

谢谢

typescript angular2-directives angular2-template angular

16
推荐指数
1
解决办法
3万
查看次数

Angular 2 html check variable undefined with ngif,当值为0时排除大小写

我正在使用Angular 2,并希望使用htm ngif coniditon检查变量值是否在角度中未定义

如果我使用<span*ngIf ="!testvar">

它还涵盖了变量testvar = 0时的情况,但我想排除它为0时的情况

以下作品,但这些是2个检查:

<span *ngIf="!testvar && testvarl != 0"></span>
Run Code Online (Sandbox Code Playgroud)

我想检查这个案例,只是为了缩短它并使其更清洁.有一个简单的方法吗?

angular2-directives angular2-template angular

16
推荐指数
1
解决办法
3万
查看次数

如何检测滚动到html元素的底部

我有这个我通过Id引用的元素:

    let infiniteScrollElement = document.getElementById('th-infinite-scroll-tracker');
Run Code Online (Sandbox Code Playgroud)

当浏览器到达元素的底部时我需要监听.

怎么做到这一点?

angular2-directives angular2-template angular

15
推荐指数
3
解决办法
4万
查看次数