首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS作用域模型与作用域方法

AngularJS作用域模型与作用域方法
EN

Stack Overflow用户
提问于 2015-10-06 15:07:25
回答 2查看 447关注 0票数 0

这是我的普伦克

我需要了解AngularJS如何处理范围变量和给定作用域的方法部分。

下面是我的控制器代码

代码语言:javascript
复制
var app = angular.module('plunker', []);

app.controller('MainCtrl', ["$scope", function($scope) {
  $scope.name = "";

  $scope.getNameLength = function(){
    return $scope.name.length;
  }
}]);

这里是我的html主体(为了简单起见,只保留我的div )

代码语言:javascript
复制
<body ng-controller="MainCtrl">
    <div>
      Enter Your Name :<input type="text" ng-model="name">
      <br>
      {{ "Your entered name whoes length is = " + getNameLength() }}
    </div>
  </body>

当我在文本框中输入某些内容时,将调用getNameLength(),并更新DOM以反映name的长度。

只要在指令中引用的方法,只要名称发生更改,就会调用该方法。

这里是我的疑问:当视图模型发生变化时,为什么要对范围中的所有方法进行角调用(在指令中是引用的)?可以禁用此行为吗?这是否对性能有任何影响?

EN

回答 2

Stack Overflow用户

发布于 2015-10-06 15:55:51

如果您担心Angular多次调用您的方法,并且希望限制执行,那么您可以始终使用ngModelOptions指令并传递退出命令。您可以看到文档在AngularJS页面上。例如:

代码语言:javascript
复制
<input type="text" ng-model="name" ng-model-options="{debounce: 500}">

只有在模型停止更新500毫秒后才会更新模型。您还可以使用像ng-model-options="{updateOn: 'blur'}"这样的工具,只在字段失去焦点之后才更新模型。

就性能而言,如果它很简单,比如计算字符串的长度,那么您就不必担心太多了。如果是更复杂的事情,你可能会遇到问题。

票数 0
EN

Stack Overflow用户

发布于 2015-10-06 17:08:45

当视图模型发生变化时,为什么要对作用域中的所有方法(在指令中引用的方法)进行角度调用?

在您的示例中,我没有看到一个自定义指令,但是角指令要么继承其父范围的范围属性,要么使用父作用域,要么具有隔离作用域。

如果您没有隔离作用域,它将查找父作用域中的属性,除非您重写它。

因为您有一个角表达式({和}包围它),因此角可以对表达式中的任何内容进行观察。当它检测到一个被监视的变量或对象已经改变时,它将更新所有依赖于它的东西。

可以禁用此行为吗?

是的,的确,正如“你”在对你的问题的评论中提到的,你可以使用“一次绑定”。

示例:

代码语言:javascript
复制
{{normalBinding}} 
{{::oneTimeBinding}}

这是否对性能有任何影响?

是的,绑定越多,观察者越多,摘要周期越长,应用程序反映变化的时间就越长。这是对大型应用程序的关注。

有关范围和观察者的更多信息可以找到这里

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

https://stackoverflow.com/questions/32973400

复制
相关文章

相似问题

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