首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单击时不更新作用域

单击时不更新作用域
EN

Stack Overflow用户
提问于 2013-11-08 15:55:16
回答 2查看 99关注 0票数 2

这是我的html

代码语言:javascript
复制
 <div ng-controller="data">
       <div class="main">
           <div>{{name}}</div>
           <div custom-tag>click</div>
       </div></br>
       <div class="main">
           <div>{{name}}</div>
           <div custom-tag>click</div>
       </div></br>
       <div class="main">
           <div>{{name}}</div>
           <div custom-tag>click</div>
       </div>
 </div>

当我单击特定的div (单击div)时,我想将名称更改为所单击的特定div的上面的div。

这是我的控制器

代码语言:javascript
复制
 app.controller('data',function($scope)
 {
     $scope.name="john"

 });

因此,当我加载我的html页面时,它将显示如下

代码语言:javascript
复制
 John
 click

 john
 click

 john
 click

当我点击第一次点击时,我必须将名字改为britto,所以输出应该是这样的

代码语言:javascript
复制
 Britto 
 click

 john
 click

 john
 click

这是我的指令,我已经尝试过了。当我点击div时,我会收到一条被点击的警告消息。但作用域的名称不变

代码语言:javascript
复制
 app.directive('customTag',function()
{
       return function(scope, element, attrs)
       {
         element.bind('click',function()
         {
           alert("clicked");
           scope.name="britto"

         });
       }

});
EN

回答 2

Stack Overflow用户

发布于 2013-11-08 16:03:04

您需要告诉作用域您所做的更改,因为您正在更新angular之外的作用域。

就像这样。

代码语言:javascript
复制
element.bind('click',function(){
   alert("clicked");
   scope.name = "britto"
   scope.$apply();
});

您也可以这样做。

代码语言:javascript
复制
element.bind('click',function(){
   alert("clicked");
   scope.$apply(function() {
      scope.name = "britto"
   });
});

我不完全确定有什么不同...

帮助记住这一点的一个好方法是记住,任何未被angular.js调用的函数都在程序流之外,无论何时对作用域进行更改,都需要使用scope.$apply();,因此click将不在程序流之外,因为它可以在任何时候触发。

票数 4
EN

Stack Overflow用户

发布于 2013-11-08 16:12:03

快速回答:您必须在更改作用域之后调用scope.$apply(),因为“单击”不是“角度感知的”。

它会起作用,但有更好的方法来做你想要的:

A.使用ng-click,跳过该指令

代码语言:javascript
复制
<div>{{name}}</div>
<div ng-click="changeName()">click</div>

然后添加到您的控制器:

代码语言:javascript
复制
$scope.changeName = function(){ $scope.name="britto"; }

指令和作用域:你真的应该花点时间通读this documentation page

您可以直接跳转到:“隔离指令的作用域”部分

-(编辑)

C.使用ng-repeat

控制器:

代码语言:javascript
复制
$scope.names = ["john","michael","jack"];

html:

代码语言:javascript
复制
<div ng-controller="data">
   <div class="main" ng-repeat="name in names">
       <div>{{name}}</div>
       <div ng-click="name='britto'">click</div>
       <br/>
   </div>
</div>

查看此plunkr

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

https://stackoverflow.com/questions/19854069

复制
相关文章

相似问题

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