首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AngularJS绑定到类型记录属性

AngularJS绑定到类型记录属性
EN

Stack Overflow用户
提问于 2014-08-12 09:32:55
回答 2查看 2.8K关注 0票数 3

我在TypeScript中定义了一个类,它的属性定义为getter和setter:

代码语言:javascript
运行
复制
class Item {
    constructor(name: string) {
        this.name = name;
        this._isSelected = false;
    }

    private _isSelected: boolean;

    public name: string;

    public get isSelected() : boolean {
        return this._isSelected;
    }

    public set isSelected(value: boolean) {
        this._isSelected = value;
        console.log('setter invoked');
    }
}

范围初始化代码如下:

代码语言:javascript
运行
复制
$scope.items = [
    new Item('A'),
    new Item('B')
];

AngularJS标记类似于:

代码语言:javascript
运行
复制
<div ng-repeat='item in items'>
    <label>
        <input type='checkbox' ng-model='item.isSelected' /> {{item.name}}
    <label>
</div>

不会调用setter --没有输出到控制台,也没有中断点命中。为什么?

我正在使用最新的AngularJS (1.3.0-beta17)。尝试将ng-model-optionsgetterSetter: true结合使用,但是看起来它需要一种特殊的语法,其中一个函数同时是getter和setter,这并不是对类型文本友好的。

UPDATE:用getset定义匿名对象。也许这与TypeScript在原型上定义类属性有关,而不是与对象本身有关?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-12 10:24:01

我找到了不起作用的原因。是我的错!

范围初始化代码实际上是使用angular.extend从另一个地方复制对象,很可能它不考虑使用Object.defineProperty定义的属性。删除这一行修正了错误。

票数 3
EN

Stack Overflow用户

发布于 2014-08-12 10:21:11

我怀疑这里的问题不完全是AngularJS,而是强制转换/反序列化:我不确定您是否能够将Json对象转换为类型记录类,而不需要在中间进行某种克隆/复制。

在我的例子中,我定义了与传入的Json匹配的接口,并将其转换为这些工作,但是这样做显然不会在中间获得setter功能。

请参阅this question,哪种类型涵盖了这一领域,以及您所拥有的一些选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25260868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档