Angular 2 beta – 选择不起作用(Chrome 除外)

Posted

技术标签:

【中文标题】Angular 2 beta – 选择不起作用(Chrome 除外)【英文标题】:Angular 2 beta – Select not working (except in Chrome) 【发布时间】:2016-05-15 03:36:24 【问题描述】:

我只是有一个关于选择元素的简单问题。我花了很多时间调试我的代码,因为 select 元素没有接受更改。但后来我发现了一些有趣的事情。他们在他们的页面 angualr.io 上有表单示例:https://angular.io/resources/live-examples/forms/ts/plnkr.html。如果您在 Chrome 以外的浏览器(如 Firefox、Edge、IE11)中尝试此示例,则选择元素不会检测到更改。 有没有其他人注意到这个问题或者我错过了什么?因为像 Select 这样的下拉元素中的变化检测是一个基本的事情......我简直不敢相信它不起作用。

【问题讨论】:

【参考方案1】:

此问题已在 beta.16 https://github.com/angular/angular/blob/master/CHANGELOG.md#200-beta16-2016-04-26 中修复

【讨论】:

【参考方案2】:

我认为这个答案可以为您提供解决方法和马克的答案:

How can I get new selection in "select" in Angular 2?

这里有一些代码:

@Component(
  (...)
  template: `
    <select [ngModel]="selectedDevice" (ngModelChange)="onChange($event)">
      <option *ngFor="#i of devices">i</option>
    </select>
  `)
  export class SomeComponent 

    onChange(newValue) 
      console.log(newValue);
      this.selectedDevice = newValue;
      // ... do other stuff here ...
    
  

【讨论】:

谢谢。我会接受你的回答,因为它是临时解决方案的正确答案。我忘了说,我用旧的 JQuery 做了我自己的解决方案。我只是不确定我是否遗漏了文档中的某些内容。很长一段时间,我们的项目都是 alpha 版本,一切都很好。我想既然他们说他们在 AdWords 内部使用 Angular2,他们就解决了这个基于 html 的问题。不用说我很失望。【参考方案3】:

the angular github也讨论了这个问题

添加 Angular 用于对其框架进行单元测试的垫片(在所有其他脚本之前)有助于解决许多 IE 问题: https://github.com/angular/angular/blob/master/modules/angular2/src/testing/shims_for_IE.js

这个特殊情况是由这个特殊函数解决的。

if (!Object.hasOwnProperty('name')) 
    Object.defineProperty(Function.prototype, 'name', 
        get: function() 
            var matches = this.toString().match(/^\s*function\s*(\S*)\s*\(/);
            var name = matches && matches.length > 1 ? matches[1] : "";
            // For better performance only parse once, and then cache the
            // result through a new accessor for repeated access.
            Object.defineProperty(this, 'name', value: name);
            return name;
        
    );

【讨论】:

以上是关于Angular 2 beta – 选择不起作用(Chrome 除外)的主要内容,如果未能解决你的问题,请参考以下文章

源映射在 Angular2 的单元测试中不起作用

Angular2嵌套路由父到子ES5不起作用

令牌未过期模块不起作用,Angular 6

Angular 6.0.3 HTML 组件选择器不起作用

使用 Visual Studio Code 进行调试不起作用

禁用日期的 HTML5 日期选择器在 Angular 中不起作用