小编squ*_*hel的帖子

Angular 2 Template Driven Form访问组件中的ngForm

我想在Angular 2中使用模板驱动的表单,我需要在我的指令中访问当前的ngForm,作为local属性,我不想将它们作为参数传递.

我的表单看起来像这样:

<form #frm="ngForm" (ngSubmit)="save(frm)">
    <input [(ngModel)]="user.name" #name="ngForm" type="text">
    <a (click)="showFrm()" class="btn btn-default">Show Frm</a>
</form>
Run Code Online (Sandbox Code Playgroud)

在我的组件中

@Component({
    selector: 'addUser',
    templateUrl: `Templates/AddUser`,
})

export class AddUserComponent implements CanDeactivate {
    public user: User;
    // how can I use this without defining the whole form 
    // in my component I only want to use ngModel
    public frm : ngForm | ControlGroup;

    public showFrm()  : void{
        //logs undefined on the console
        console.log(this.frm);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是可能的,因为我需要检查myFrm是否是valide或是否触及了我无法将当前表单作为参数传递的函数,例如"routerCanDeactivate",我不想过多地使用模型驱动的表单写代码,我喜欢旧学校的ng1模型绑定.

我已经更新了我的示例,并且组件中不知道frm.

angular

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

Angular 2 Di无法正常工作 - 无法解析所有参数

我已经创建了一个简单的Hello World应用程序.但是,当我想添加一个"服务"只是一个简单的Di我得到以下错误:

angular2.dev.js:23877 EXCEPTION:无法解析'AppComponent'(?)的所有参数.确保所有参数都使用Inject进行修饰或具有有效的类型注释,并且"AppComponent"使用Injectable进行修饰.

angular2-polyfills.js:469未处理的Promise拒绝:无法解析'AppComponent'(?)的所有参数.确保所有参数都使用Inject进行修饰或具有有效的类型注释,并且"AppComponent"使用Injectable进行修饰.; 区域:角; 任务:Promise.then; 值:

我有3个档案

boot.ts:

///<reference path="../../node_modules/angular2/typings/browser.d.ts"/>
import {bootstrap} from 'angular2/platform/browser'
import {AppComponent} from './mainApp'
bootstrap(AppComponent);
Run Code Online (Sandbox Code Playgroud)

mainApp.ts:

import {Component} from 'angular2/core';
import {CourseService} from './course.service';


@Component({
    selector: 'my-app',
    template: 'My First Angular 2 App',
    providers: [CourseService],
})
export class AppComponent {
    constructor(courseService: CourseService) {
    }
} 
Run Code Online (Sandbox Code Playgroud)

course.service.ts:

export class CourseService {
   public getCourses(): string[] {
      let courses: string[] = ["Course 1", "Course 2", "Course 3"];
      return courses;
  }
}
Run Code Online (Sandbox Code Playgroud)

当我从构造函数中删除参数时,每件事都可以正常工作.

这就是我的HTML文档的头部,我使用angular 2 beta 13:

<script …
Run Code Online (Sandbox Code Playgroud)

angular2-di angular

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

Bootstrap 4禁用容器中的navbar-collapse

嗨我想在Bootstrap 4中禁用导航栏折叠.如果导航栏占据整个宽度但在导航栏内容器类只允许默认宽度放置内容,那将会很好.

在bootstrap 4中尝试过这个禁用响应式导航栏,但这不适用于其中的容器.

但那不起作用.

<nav class="navbar navbar-light bg-faded justify-content-between flex-nowrap flex-row">
  <div class="container">
    <a href="/" class="navbar-brand">PIM</a>
    <ul class="nav navbar-nav flex-row">
      <li class="nav-item"><a class="nav-link pr-3" href="">Login</a></li>
      <li class="nav-item"><a class="nav-link" href="">Sign up</a></li>
    </ul>
  </div>
</nav>
Run Code Online (Sandbox Code Playgroud)

看起来像:

在此输入图像描述 但是应该没有换行符.

如果登录将保持对齐并且注册将在导航栏中右对齐,那也很好.

twitter-bootstrap bootstrap-4

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

带有ControllerAs和TypeScript类的AngularJs指令

我用TypeScript写了一个AngularJs指令将modelValues复制到剪贴板,指令的"旧"$ scope版本到目前为止工作正常:

module App.Directives {
interface ICopyToClipboardScope extends ng.IScope {
    sqValues: ng.INgModelController;
    copyToClipbaord(): void;
}

/*
 * Usage: <div sq-copy-to-clipboard ng-model="viewModel.Name"></div>
 */
export class CopyToClipboard implements ng.IDirective {
    public restrict: string = "A";
    public replcae: boolean = true;
    public require = "ngModel";
    public template: string = '<a ng-click="sqCopyPateCtrl.copyToClipboard()" class="btn btn-default" title="In der Zwischenablage ablegen"><i class="fa fa-fw fa-copy"></i></a>';

    public scope = {
        sqValues: "=ngModel"
    }

    public controller = ($scope: ICopyToClipboardScope) => {
        var inputId: string = "sqCopyToClipboardText";
        var input = $(`<input …
Run Code Online (Sandbox Code Playgroud)

angularjs typescript angularjs-directive

5
推荐指数
1
解决办法
3553
查看次数

angularjs单元测试何时使用$ rootScope.$ new()

我真的不明白我应该在角度单位测试中使用$ rootScope = $ rootScope.$ new().你在许多单元测试例子中看到了这个断言.但在以下示例中不起作用:

angular.module("app.root", []).factory("rootFct", function ($rootScope) {
    $rootScope.amount = 12;
    return {
        getAmount: function () {
           return ($rootScope.amount + 1);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

关联的单元测试不起作用:

describe('Amount Tests', function() {
    var rootFct, $rootScope;

    beforeEach(function() {
        angular.mock.module("app.root");
        angular.mock.inject(function (_rootFct_, _$rootScope_) {
            $rootScope = _$rootScope_.$new();
            rootFct = _rootFct_;
        });
    });

    it('Set Amount in rootScope on 10', function() {
        var result = rootFct.getAmount();
        expect(result).toBe(13);
        $rootScope.amount = 15;
        result = rootFct.getAmount();
        expect(result).toBe(16);
    });
});
Run Code Online (Sandbox Code Playgroud)

它只适用于我改变它的时候

$rootScope = _$rootScope_.$new();
Run Code Online (Sandbox Code Playgroud)

$rootScope = …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing jasmine angularjs

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

Angular 2 - Webpack 2 - 模板加载器不使用templateUrl

我为我的应用程序创建了一个最小的webpack示例,我尝试使用带有"./file.name.html"的templateUrl进行编译.但我的应用程序显示的唯一内容是我的索引页面上的templateUrl"./ file.name.html"的名称.这些应用程序似乎有效,因为控制台和控制台都没有错误

<app>... Loading </app> 
Run Code Online (Sandbox Code Playgroud)

不再显示了.在我尝试使用webpack之前,我使用过systemJs,而我的应用程序运行得非常好.所以我不认为这是一个应用程序问题.

我的起始文件名是boot.ts

/// <reference path="../typings/index.d.ts" />
import 'core-js/es6';
import 'core-js/es7/reflect';
import "zone.js/dist/zone";

import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { AppModule } from './app.module';

const platform = platformBrowserDynamic();
platform.bootstrapModule(AppModule);
Run Code Online (Sandbox Code Playgroud)

app.component定义看起来像

.... Imports

@Component({
    selector: 'sxp-app',
    templateUrl: "./app.component.html"
})
export class AppComponent { ... } 
Run Code Online (Sandbox Code Playgroud)

我的webpack.config.js

var path = require('path');

module.exports = {
    entry: "./App/boot.ts",
    output: {
        path: path.join(__dirname, './Scripts/dist'),
        filename: "bundle.js"
    },
    resolve: {
        extensions: ['.ts', '.js']
    },
    module: {
        loaders: [
             {
                 test: /\.ts$/, …
Run Code Online (Sandbox Code Playgroud)

angular-ui-router webpack ts-loader angular

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