Angular 2 NgModel不起作用 [英] Angular 2 NgModel doesn't work

查看:148
本文介绍了Angular 2 NgModel不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在开始从Angular 1过渡到Angular2.我尝试首先做一些简单的事情,所以我写了一个组件:

I'm starting my transition from Angular 1 to Angular 2. I tried to do simple things first so I wrote a component:

import {Component} from 'angular2/core';
import {NgModel} from 'angular2/common';

@Component({
  selector: 'app',
  template: `
    <div>
    <div>Value is {{ value }}</div>
    <input type="text" [(ngModel)]="value" />
    </div>
  `,
  directives: [NgModel]
})
export class App {
  value: string;
};

<!DOCTYPE html>
<html>
  <head>
    <title>Angular2</title>
  </head>
  <body>
    <app></app>

    <script src="./js/bundle.js"></script>
  </body>
</html>

(bundle.js仅执行app组件的引导程序)

(bundle.js do only the bootstrapping of app component)

我希望在文本框中输入内容后,我应该在div中得到相同的文本.但这不会发生.

I expect after I type something into the textbox, I should get the same text in the div. But it doesn't happen.

为什么我的代码不起作用?

Why doesn't my code work?

关于, 萨伦(Sarun)

Regards, Sarun

更新我认为我可能会错误地配置我的构建系统,所以我包括了gulpfile.jspackage.jsonboot.ts.

UPDATE I assume I may configure my build system incorrectly, so I include my gulpfile.js, package.json and boot.ts.

gulpfile.js

gulpfile.js

var gulp = require('gulp');
var browserify = require('browserify');
var tsify = require('tsify');
var source = require('vinyl-source-stream');
var uglify = require('gulp-uglify');
var buffer = require('vinyl-buffer');
var sourcemaps = require('gulp-sourcemaps');

gulp.task('ts', function() {
  browserify({
    debug: true
  })
  .add('source/ts/boot.ts')
  .plugin(tsify)
  .bundle()
  .pipe(source('bundle.js'))
  .pipe(buffer())
  .pipe(sourcemaps.init({
    loadMaps: true
  }))
  .pipe(uglify())
  .pipe(sourcemaps.write())
  .pipe(gulp.dest('build/js'));
});

gulp.task('watch', function() {
  gulp.watch('source/ts/**/*.ts', ['ts']);
});

package.json

package.json

{
  "name": "hello-angular2",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "angular2": "^2.0.0-beta.0",
    "es6-promise": "^3.0.2",
    "es6-shim": "^0.34.0",
    "reflect-metadata": "^0.1.2",
    "rxjs": "^5.0.0-beta.0",
    "zone.js": "^0.5.10"
  },
  "devDependencies": {
    "browserify": "^12.0.1",
    "gulp": "^3.9.0",
    "gulp-exec": "^2.1.2",
    "gulp-live-server": "0.0.29",
    "gulp-sourcemaps": "^1.6.0",
    "gulp-uglify": "^1.5.1",
    "gulp-watch": "^4.3.5",
    "lite-server": "^1.3.2",
    "tsify": "^0.13.1",
    "typescript": "^1.7.5",
    "vinyl-buffer": "^1.0.0",
    "vinyl-source-stream": "^1.1.0"
  }
}

boot.ts

import 'reflect-metadata';
import {bootstrap} from 'angular2/platform/browser';
import {App} from './app';

bootstrap(App);

推荐答案

在深入研究文档并进行了长时间的谷歌搜索之后,我终于找到了答案.

After a long dig in to the docs and a long googling, I finally found the answer.

(此答案将来可能会更改,请参阅Angular文档)

(This answer may change in the future, refer to Angular Documentation)

https://github.com/angular/angular/blob/master/modules/angular2/docs/bundles/overview.md

正如@pixelbits所提到的,我错过了几个依赖项rxjsangular2-polyfills,后者是另外两个依赖项zone.jsreflect-metadata的polyfill,并且必须仅包含在<script>标记中

As @pixelbits mentioned, I missed a couple of dependencies rxjs and angular2-polyfills, the latter is a polyfill for two other dependencies zone.js and reflect-metadata and this must be included in a <script> tag only.

我需要做的是:

  1. boot.ts中删除reflect-metadata导入,并将rxjs导入添加到其中.
  2. angular2-polyfills.js<script>标记添加到index.html
  1. Remove reflect-metadata import from boot.ts and add rxjs import to it.
  2. Add a <script> tag for angular2-polyfills.js to index.html

瞧!它按预期工作.

感谢@ pixelbits,@ Zyzle和@GünterZöchbauer帮助我.

Thanks to @pixelbits, @Zyzle and @Günter Zöchbauer for helping me.

这篇关于Angular 2 NgModel不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆