Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS ng模型不进行双向数据绑定_Angularjs_Data Binding_Angularjs Scope - Fatal编程技术网

AngularJS ng模型不进行双向数据绑定

AngularJS ng模型不进行双向数据绑定,angularjs,data-binding,angularjs-scope,Angularjs,Data Binding,Angularjs Scope,我有一个带有如下输入框的标签: <label class="item item-input"> <input type="text" data-ng-model="description" placeholder="Add a Description!"> </label> 在我的HTML中,我还有一行: <div ng-show="description.length <= maxChars">{{descr

我有一个带有如下输入框的标签:

<label class="item item-input">
    <input type="text" data-ng-model="description"
           placeholder="Add a Description!">
</label>
在我的HTML中,我还有一行:

<div ng-show="description.length <= maxChars">{{description}}</div>
{{description}
当用户在输入框内键入后点击submit按钮时,将调用submit函数。说明显示正确。当用户在输入框中键入时,说明会在HTML中更新,但不会在控制器中更新

我有一种感觉,它与将description设置为空字符串有关,但就HTML而言,它显然正在得到更新。但它保留console.logging和空字符串

为了实现这一点,我必须将描述直接传递到submit函数中(并相应地更新函数):

提交
这是完全没有必要的,因为Angular应该自动执行双向数据绑定,但事实并非如此

有人有什么想法吗

任何帮助都将不胜感激

编辑:

这里是由于流行的需求完整的HTML

<ion-view title="Moments" id="page2">
<ion-content padding="true" class="has-header">
<img src="{{picture}}" height="300px" width="100%"> </img>
<div class="row">
  <div ng-show="description.length > maxChars" style= "color: red">{{description}}</div>
  <div ng-show="description.length <= maxChars">{{description}}</div>
</div>
<div class="row" ng-if="description">
  <div ng-show="description.length > maxChars" style= "color: red">{{description.length}} / {{maxChars}}</div>
  <div ng-show="description.length <= maxChars" style= "color: green">{{description.length}} / {{maxChars}}</div>
</div>
<div class="row">
    <div class="col">
      <label class="item item-input">
        <input type="text" data-ng-model="description" placeholder="Add a Description!">
      </label>
    </div>
    <button style="margin-right: 5px" class="col col-10 button button-positive" data-ng-click="checkDescription(description)">OK</button>
</div>
<div class="row">
  <div class="col"><ion-checkbox data-ng-change="changeLocation()" data-ng-model="location">Show Location</ion-checkbox></div>
</div>
<div class="row">
  <div class="button-bar">
    <button class="button button-assertive" data-ng-click="cancel()">Cancel</button>
    <button class="button button-positive" data-ng-click="submit(description)">Submit</button>
  </div>
</div>
</ion-content>
</ion-view>

{{description}}
{{description}}
{{description.length}/{{maxChars}
{{description.length}/{{maxChars}
好啊
显示位置
取消
提交
我还知道,在这个问题中,submit函数不带任何参数。这就是我想要的。目前我的提交按钮接受一个参数(说明)。这不应该是必要的。我对函数“checkDescription”也有同样的问题。该函数也应该没有参数,但我不得不将描述直接传递到函数中。我不想做的事

执行摘要: 在AngularJS中,子作用域通常从其父作用域原型继承。此规则的一个例外是使用
作用域:{…}
的指令——这会创建一个不典型继承的“隔离”作用域。(和带有转换的指令)此构造通常在创建“可重用组件”指令时使用。在指令中,默认情况下直接使用父范围,这意味着指令中来自父范围的任何更改都将在父范围中更改。如果设置了
scope:true
(而不是scope:
{…}
),则该指令将使用原型继承

作用域继承通常是直接的,您甚至不需要知道它正在发生。。。直到您尝试将双向数据绑定(即表单元素、ng模型)从子作用域内部绑定到父作用域上定义的基元(例如数字、字符串、布尔值)。它不像大多数人期望的那样工作。发生的情况是,子作用域获取自己的属性,该属性隐藏/隐藏同名的父属性。这不是AngularJS正在做的事情——这是JavaScript原型继承的工作方式。新的AngularJS开发人员通常没有意识到
ng repeat
ng switch
ng view
ng include
ng if
都会创建新的子范围,因此当涉及到这些指令时,问题往往会出现。(有关问题的快速说明,请参阅。)

通过遵循“最佳实践”,可以很容易地避免原语的这个问题–观看3分钟。Misko演示了ng开关的基本绑定问题



我尝试在我的范围内使用“.”符号,但每当我尝试这样引用它时:

$scope.moment.description = ""; 
它表示“无法读取
未定义的
的属性“描述”

在将值指定给特性之前,代码需要创建对象:

$scope.moment = {};
$scope.moment.description = "";

//OR

$scope.moment = { description: "" };    

它应该更新正确。也不需要监视。但是你能完整地发布你的代码吗?或者说,你在html中使用'submit(description'),但声明'submit=function()“…是否有一个
ng if
ng repeat
或其他指令在输入元素和控制器之间创建作用域?如果在ng模型中不使用点
,可能会导致问题。有关更多信息,请参阅。我尝试在我的作用域中使用“.”符号,但每当我尝试这样引用它时:$sco”pe.moment.description=“”;它表示“无法读取未定义的属性“描述”。
$scope.moment.description = ""; 
$scope.moment = {};
$scope.moment.description = "";

//OR

$scope.moment = { description: "" };