博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
textarea的内容改变,绑定的model却没更新
阅读量:6923 次
发布时间:2019-06-27

本文共 1579 字,大约阅读时间需要 5 分钟。

问题描述:

//app.jsangular.module('deapp', []).controller('ParentCtrl', ['$scope', ParentCtrl]).controller('ChildCtrl', ['$scope', ChildCtrl]);function ParentCtrl($scope) {  $scope.description = '';}function ChildCtrl($scope) {}//index.html

我修改textarea的内容时,绑定的description完全没更新,只能用chrome插件ng-inspector看一下。

clipboard.png

图1 初始scope

clipboard.png

图2 输入后ChildCtrl 出现description

所以可以看到问题变成了Angular Scope Inheritance

Angular Scope Inheritance

我用word文档画了scope的继承图示,如下

clipboard.png

图3 初始scope

clipboard.png

图 4 错误的给ChildCtrl添加了description

在这个图可以看到实际上并没有更新父级scope的description,反而在当前所在的ChildCtrl scope新建了description。也就是说与textarea绑定的model实际上是ChildCtrl scope中的description。

$scope的继承是原型链继承,有两个特点:

  1. 读子类的属性时,子类有这个属性(hasOwnProperty)的时候则读子类自己的,子类没有的时候读父类的,不管子类有没有这个属性,在子类上都不会有新属性被创建。

  2. 写子类的属性时,如果子类有这个属性(hasOwnProperty)则写子类的,子类没有的话就会在子类上新建一个同名的新属性,而父类继承过来的属性被隐藏。

    ————来自

所以对于description也是一样,读description时,先在ChildCtrl中读,读不到就到ParentCtrl中读,所以事先给ParentCtrl的description设置的初始值,在页面刷新后是可以显示出来的。

但是,写description的时候就不一样了,在ChildCtrl中找不到就直接创建一个新的属性,父级scope的同名属性就被隐藏了,textarea绑定的模型也就变成了ChildCtrl scope中的description,往后再怎么修改textarea的内容,父级scope的description永远保持原来的值。

这不是我想看到的,办法是有的,使用.就能解决这个问题了。

  1. 只需改html,将textarea显示绑定到$parent.description

    <div data-ng-controller="ParentCtrl">

    </div>

  2. 使用对象的形式来绑定description

    // app.js

    function ParentCtrl($scope) {

    $scope.info = {   description: '156' };

    }

    function ChildCtrl($scope) {

    }

    // index.html

    <div data-ng-controller="ParentCtrl">

    </div>

为什么一个.就能解决问题了呢,以第二个方法为例。

写的时候是写info.description,需要先读info,ChildCtrl没有info,于是去ParentCtrl读,找到info后,就写父级scope的info.description。

转载地址:http://ojujl.baihongyu.com/

你可能感兴趣的文章
Jmeter4.0源码二次开发详细分析解读(一)
查看>>
Java各种IO流的总结
查看>>
从手淘搜索到优酷短视频,阿里巴巴是如何在搜索推荐领域下应用深度学习的?...
查看>>
程序员,不甘平凡又害怕努力…
查看>>
基于BC实现的(JAVA版)SM2国密算法签名验签DEMO
查看>>
分布式缓存架构设计
查看>>
初学者学习arm嵌入式有什么好的建议?嵌入式开发学习
查看>>
经验分享:如何合并pdf文件
查看>>
到底该怎么理解平均负载
查看>>
文件特殊权限
查看>>
Oracle 高水位线
查看>>
Oracle 数据库QUIESCE状态详解
查看>>
oracle 10g数据泵和导入导出性能对比(二)
查看>>
ORACLE SQL语句优化
查看>>
PIE SDK应用掩膜
查看>>
MySQL(二):特性详解
查看>>
DRBD的使用配置
查看>>
一个简单的串口程序
查看>>
rsync: failed to connect to 192.168.2.9: Connection refused
查看>>
操作系统无人值守自动安装之Windows XP
查看>>