角度2应用程序

时间:2016-08-05 11:44:16

标签: javascript angularjs angular ng-upgrade

我们使用这个非常棒的Angular2 Seed创建了一个Angular 2应用程序。所以我的问题是,如何升级这个Angular 1指令:

import template from './sbgOutlineButton.html!text';

var app = angular.module('sbgOutlineButton', []);

app.directive('sbgOutlineButton', function() {
    let link = function(scope, element, attributes) {
        if (attributes.icon === undefined) {
            let materialIcon = element.find('i.material-icons');
            materialIcon.addClass('hidden');
        }

    };

    return {
        link: link,
        restrict: 'E',
        template: template,
        replace: true,
        transclude: true,
        scope: { icon: '@' }
    };
});

export default app;

这样我就可以在下面的Angular 2组件中使用它:

import { Component, OnInit, ChangeDetectionStrategy } from '@angular/core';
import { UpgradeAdapter } from '@angular/upgrade';

@Component({
    moduleId: module.id,
    selector: 'test-page',
    templateUrl: 'testpage.page.html',
    styleUrls: ['testpage.page.css']
})
export class TestPage implements OnInit {
    constructor() { }
    ngOnInit() { }
}

你们有没有想过我将如何做到这一点?它甚至可能吗?因为我在研究期间发现的很多其他文章都表明你的“基础”应用程序应该是Angular 1 ...

提前致谢。 弗朗索瓦

2 个答案:

答案 0 :(得分:0)

如何将angular1指令转换为angular2指令?

注意:我不知道它是否有用,只是看一看。

点击此处的演示: https://plnkr.co/edit/4Fhtm76iJl0aQmgjO7n0?p=preview

<强> customeDirective.ts

import {Directive, Attribute,ElementRef,Renderer} from '@angular/core';

@Directive({
  selector: '[myAttr]'
})

export class myDir {
    constructor(@Attribute('icon') private icon,private el:ElementRef,private rd: Renderer){
    console.log(this.icon);
    if(this.icon===null){    //<--- you can play here as per your need.
      console.log('icon is undefined');
    }
    else{
            rd.setElementClass(el.nativeElement, 'myClass',true);
    }
    console.log(el.nativeElement); 
  }
}

<强> AppComponent.ts

//our root app component
import {Component} from '@angular/core';
import {myDir} from 'src/customDirective';

@Component({
  selector: 'my-app',
  directives:[myDir],
  template: 
  `
  <style>
    .myClass{
      color:red;
      background:yellow;
    }
  </style>


    <div myAttr icon="myIcon">Angular2</div>  <!-- icon attribute is present so it will add the class -->

            <!-- OR USE BELOW HTML INSTEAD OF ABOVE -->

    <div myAttr>Angular2</div>                 <!-- icon attribute is not present so it gives null -->


  `
})
export class App {}

答案 1 :(得分:-5)

您需要使用"@angular/upgrade": "2.0.0-rc.4",升级到angular2 Guide

  

因为我在我的期间发现了很多其他文章   研究表明你的基础&#34;应用程序应该是Angular 1 ...

如果你有一个已经有角度的1项目,你想要升级到一个项目。 Angular2不需要angular1作为基础

在angular2

中编写指令
import { Directive, ElementRef, Input } from '@angular/core';
@Directive({ selector: '[myHighlight]' })
export class HighlightDirective {
    constructor(el: ElementRef) {
       el.nativeElement.style.backgroundColor = 'yellow';
    }
}

我的第一个属性指令

突出我!

import { Component } from '@angular/core';
import { HighlightDirective } from './highlight.directive';
@Component({
  selector: 'my-app',
  templateUrl: 'app/app.component.html',
  directives: [HighlightDirective]
})
export class AppComponent { }

你不需要将angular1混合成两个......