谈angularJs中的apply()
博客专区 > own1991 的博客 > 博客详情
谈angularJs中的apply()
own1991 发表于8个月前
谈angularJs中的apply()
  • 发表于 8个月前
  • 阅读 5
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

当触发事件click()及setTimeout(),$timeout这些要更新DOM要使用apply(),不然模板更新了,但DOM更新不了。  后台可以打印出来, 详细;http://blog.csdn.net/dm_vincent/article/details/38705099

还可以简单粗暴scope。scope.$apply()

<body ng-app="myApp">  
  <div ng-controller="MessageController">  
    Delayed Message: {{message}}  
  </div>    
</body>  

angular.module('myApp',[]).controller('MessageController', function($scope) {  
      
      $scope.getMessage = function() {  
        setTimeout(function() {  
          $scope.message = 'Fetched after 3 seconds';  
          console.log('message:'+$scope.message);  
        }, 2000);  
      }  
        
      $scope.getMessage();  
      
    });  

不起作用,以下改善。

angular.module('myApp',[]).controller('MessageController', function($scope) {  
      
      $scope.getMessage = function() {  
        setTimeout(function() {  
          $scope.$apply(function() {  
            //wrapped this within $apply  
            $scope.message = 'Fetched after 3 seconds';   
            console.log('message:' + $scope.message);  
          });  
        }, 2000);  
      }  
        
      $scope.getMessage();  
      
    });  

事件类型;

<body ng-app="APP">
<script src="https://cdn.bootcss.com/angular.js/1.5.8/angular.min.js"></script>
<p>{{message}}</p><input ng-model="message" />
<div><test-dw></test-dw></div>
</body>

var appd = angular.module("APP",[]);
        appd.directive("testDw", function(){
            return{
                //restrict:"A",
                //scope:true,
                restrict:"AE",
    	          template:"<div><button>点击</button><div>{{message}}</div></div>",
                //replace:true,
                link:function(scope, element, attrs){
                    element.bind("click", function(){
                        //scope.$apply(function(){
                            scope.message="这就对啦";
                            console.log(scope.message)
                        //})
                    } )
                },
            }
        })

改善,

<body >
<p>{{message}}</p><input ng-model="message" />
<div><test-dw></test-dw></div>
<script src="https://cdn.bootcss.com/angular.js/1.4.0-beta.4/angular-1.4.0-beta.5/angular.js"></script>
<script type="text/javascript">
    var appd = angular.module("APP",[])
        .directive("testDw", function(){
            return{
                restrict:"A",
                scope:true,
                template:"<div><button>点击</button><div>{{message}}</div></div>",
                //replace:true,
                link:function(scope, element, attrs){
                    element.bind("click", function(){
                        scope.$apply(function(){
                            scope.message="这就对啦";
                        })
                    } )
                }
            }
        })
</script>
</body>

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 52
码字总数 29561
×
own1991
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: