javascript - 单击时范围未更新

标签 javascript angularjs

这是我的html

 <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。

这是我的 Controller

 app.controller('data',function($scope)
 {
     $scope.name="john"

 });

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

 John
 click

 john
 click

 john
 click

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

 Britto 
 click

 john
 click

 john
 click

这是我尝试过的指令。当我单击 div 时,我收到了单击的警报消息。但scope的名字并没有改变

 app.directive('customTag',function()
{
       return function(scope, element, attrs)
       {
         element.bind('click',function()
         {
           alert("clicked");
           scope.name="britto"

         });
       }

});

最佳答案

您需要告诉范围您进行了更改,因为您正在更新 Angular 之外的范围。

像这样。

element.bind('click',function(){
   alert("clicked");
   scope.name = "britto"
   scope.$apply();
});

您也可以这样做。

element.bind('click',function(){
   alert("clicked");
   scope.$apply(function() {
      scope.name = "britto"
   });
});

我不太确定有什么区别......

帮助记住这一点的一个好方法是记住,任何未由 angular.js 调用且超出程序流程的函数,无论何时都需要使用 scope.$apply();更改范围,因此 click 将脱离流程,因为它可以随时触发。

关于javascript - 单击时范围未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19854069/

相关文章:

javascript - 为 Node 应用程序设置正确的结构

javascript - 播放 m3u8 文件时 cordova-plugin-media 出错

angularjs - 我们可以使用 Ionic 2 和 AngularJs 1 吗?

javascript - 尝试链接我的 array.js 文件时出现 404 错误

javascript - 在 Javascript 中使用 JQuery 检测按键事件 (Enter)(在 Linux 平台上)

javascript - Angularjs ng-click 不更新 View

angularjs - 从 token 创建 Django session

node.js - Express + Angular 路由导致无限循环+崩溃

javascript - 如何在 vuelidate 中设置验证规则使其具有与对象字段相同的值?

javascript - d3.js可视化json文件麻烦