【学】AngularJS日记(3)- $apply(), run()方法
$scope.$apply()方法可以强制$apply()里运行的函数所改变的model里的数据直接反应到view里,因为在angular的环境中,有时会用到原生js或者jquery的时候,这些行为有时无法实现angular里的双向绑定机制,需要手动调用$scope.$apply(),将这个行为(函数调用)外面包一层$scope.$apply()。其实angular实现双向绑定的机制其实就是在内部添加的监视$watch,然后自动调用了$scope.$apply(),只是我们在用原生js或者jq的时候让angular强制使用一次。
关于$apply()的具体原理和用法在下面这个地址有详细介绍,是翻译国外的文章的:
http://blog.csdn.net/dm_vincent/article/details/38705099
比如,下面这个写法用了原生的setTimout(),其实是不起作用的,尽管name的值在2.5秒后改成了hi,但是并没有在view层显示出改变
var app = angular.module('myApp',[]);
app.controller('cont1',['$scope',function($scope){
$scope.name = 'hello';
setTimeout(function(){
$scope.name = 'hi';
},2500);
}]);
有2中办法可以解决。
方法一:注入angular自带的$timeout,并代替原生setTimeout
var app = angular.module('myApp',[]);
app.controller('cont1',['$scope','$timeout',function($scope,$timeout){ //注意这里要把$timeout注入参数里,并且写在数组前列
$scope.name = 'hello';
$timeout(function(){
$scope.name = 'hi';
},2500);
}]);
方法二:在setTimeout函数内部强制调用$scope.$apply()
app.controller('cont1',['$scope',function($scope){
$scope.name = 'hello';
setTimeout(function(){
$scope.$apply(function(){
$scope.name = 'hi';
});
},2500);
}]);
模块对象的run()方法使用,可以在不定义controller的情况下,在模块对象下直接在全局$rootScope下挂在变量,
var app = angular.module('myApp',[]);
app.run(['$rootScope',function($rootScope){ //这里注意写法,run()方法里是一个数组
$rootScope.name = 'hello';
}]);
<body>
{{name}} <!--这时的name是在全局环境下的name了,而并没有创建任何控制器-->
</body>
【学】AngularJS日记(3)- $apply(), run()方法的更多相关文章
- angularJs的run方法操作
省掉了控制器 <!DOCTYPE HTML> <html ng-app="myApp"> <head> <meta http-equiv= ...
- spring-boot-2.0.3启动源码篇五 - run方法(四)之prepareContext
前言 此系列是针对springboot的启动,旨在于和大家一起来看看springboot启动的过程中到底做了一些什么事.如果大家对springboot的源码有所研究,可以挑些自己感兴趣或者对自己有帮助 ...
- Hystrix的一个坑,queue中的run方法没有被执行?
今天学的时候随手测了一下Hystrix的queue的异步执行,发现执行queue之后,还没有打印run方法中的内容,程序就结束了: import com.netflix.hystrix.Hystrix ...
- 【pwn】学pwn日记——栈学习(持续更新)
[pwn]学pwn日记--栈学习(持续更新) 前言 从8.2开始系统性学习pwn,在此之前,学习了部分汇编指令以及32位c语言程序的堆栈图及函数调用. 学习视频链接:XMCVE 2020 CTF Pw ...
- 0040 Java学习笔记-多线程-线程run()方法中的异常
run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为 ...
- Angularjs 的 ngInfiniteScroll 的使用方法
Angularjs 的 ngInfiniteScroll 的使用方法 一.介绍 ngInfiniteScroll 是一个 AngularJS 的扩展指令,实现了网页的无限滚动的功能,也就是相当于页面滚 ...
- java synchronized修饰普通方法,修饰静态方法,修饰代码块,修饰线程run方法 比较
synchronized用于多线程设计,有了synchronized关键字,多线程程序的运行结果将变得可以控制.synchronized关键字用于保护共享数据. synchronized实现同步的机制 ...
- $watch监听数据变化和run方法
angular中$watch方法可以监听数据的变化. $scope.$watch('phone',function(){ $scope.phone.fre = $scope.phone.num> ...
- JS 的 call apply bind 方法
js的call apply bind 方法都很常见,目的都是为了改变某个方法的执行环境(context) call call([thisObj[,arg1[, arg2[, [,.argN]]]] ...
随机推荐
- Django1.3 创建项目
经历了各种失败各种烦恼以后Django开发环境终于搭建好了! 系统环境:ubuntu12.04 Django版本1.3.1 Python版本 2.7.3 接下来就兴建一个项目练习一下 1.创 ...
- 原创: How to build a query based on Definition Updates installed
In SCCM 2012 R2, you can use following class. Use SMS_CombinedDeviceResources.EPAntivirusSignatureLa ...
- Django project structure: how does static folder, STATIC_URL, STATIC_ROOT work
So I've been messing up with Django(1.6+) project setting for quite sometime, this is what i finally ...
- 最短路径问题——floyd算法
floyd算法和之前讲的bellman算法.dijkstra算法最大的不同在于它所处理的终于不再是单源问题了,floyd可以解决任何点到点之间的最短路径问题,个人觉得floyd是最简单最好用的一种算法 ...
- win10删除或更改需要SYSTEM或Administrators权限的文件夹
有时候我们需要删除一些系统文件夹或者文件,但是却经常会出现如下提示: 遇到这些情况,我们可以采用如下的解决手段. 一.右键单击需要更改或删除的文件夹,选择属性. 二.在弹出的窗口菜单里,选择“安全”选 ...
- github:如何获取项目源代码
github是流行的源码管理平台.这上面有很多开源的项目.作为普通的用户,如何获取这些开源项目的源码呢? 1.首先需要注册一个github账号. 2.安装windows下的git工具:下载地址: ht ...
- reactjs
摘自阮一峰博客:http://www.ruanyifeng.com/blog/2015/03/react.html 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 Rea ...
- 在apache中设置访问目录后进入的默认页面为index.php
找到apache的配置文件httpd.conf后找到 DirectoryIndex index.html index.php 在其中添加index.php,
- UVA 10474
题意:给你一组数,再给几个数问是否在一组数中. 题很简单:STL入门. 没用到STL. #include<iostream> #include<cstdio> #include ...
- java_SE(Day15)_集合1
一.集合类概述: 1.为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类. 2.数组和集合类同是容器,有何不同? 数组虽然也可以存储对象 ...