AngularJS中监视Scope变量以及外部调用Scope方法


Posted in Javascript onJanuary 23, 2016

在AngularJS中,有时候需要监视Scope中的某个变量,因为变量的改变会影响一些界面元素的显示。有时,也希望通过jQuery调用Scope的某个方法。

比如以下场景:

<div>
<button id="jQBtn">jQ Button</button>
</div>
<div id="ngSection" ng-controller="NGCtrl">
<input type="checkbox" ng-model="jQBtnState"/> Toggle jQ button state
<p>Counter: {{counter}}</p>
</div>

以上,我们希望:

● Scope中的jQBtnState变量值如果为false让id为jQBtn的按钮禁用
● 点击id为jQBtn的按钮调用Scope中的某个方法让Scope中的变量counter自增1

我们可能会这样写:

$('#jQBtn').on("click", function(){
console.log("JQuery button clicked");
//需要考虑的问题是:
//这里如何调用Scope中的某个方法,使Scope的的变量counter自增1
})

...

myApp.controller("NGCtrl", function($scope){
$scope.counter = 0;
//这里,怎么让jQBtnState变量值发生变化告之外界呢?
$scope.jQBtnState = false;
$scope.jQBtnClick = function(){
$scope.counter++;
}
})

其实,使用$watch方法可以监视Scope某个变量的变化,当变化发生调用回调函数。

myApp.controller("NGCtrl", function($scope){
$scope.counter = 0;
$scope.jQBtnState = false;
$scope.$watch("jQBtnState", function(newVal){
$('#jQBtn').attr('disabled', newVal);
});
$scope.jQBtnClick = function(){
$scope.counter++;
}
})

以上,当jQBtnState变量值为false的时候就会禁用id为jQBtn的按钮。

外界如何调用Scope的方法呢?

--先获取Scope,然后使用$apply方法调用Scope内的方法。
$('#jQBtn').on("click", function(){
console.log("JQuery button clicked");
var scope = angular.element(ngSection).scope();
scope.$apply(function(){
scope.jQBtnClick();
});
})

以上,通过获取Scope,使用$apply方法调用Scope内的jQBtnClick方法使Scope呢的变量counter自增1。

以上所述是针对AngularJS中监视Scope变量以及外部调用Scope方法 的相关知识,希望对大家有所帮助。

Javascript 相关文章推荐
IE和FireFox(FF)中js和css的不同
Apr 13 Javascript
jquery不会自动回收xmlHttpRequest对象 导致了内存溢出
Jun 18 Javascript
jQuery滚动加载图片效果的实现
Mar 06 Javascript
防止xss和sql注入:JS特殊字符过滤正则
Apr 18 Javascript
Flexigrid在IE下不显示数据的有效处理方法
Sep 04 Javascript
详谈javascript中的cookie
Jun 03 Javascript
js数组的五种迭代方法及两种归并方法(推荐)
Jun 14 Javascript
Vuex利用state保存新闻数据实例
Jun 28 Javascript
谈谈VUE种methods watch和compute的区别和联系
Aug 01 Javascript
vue删除html内容的标签样式实例
Sep 13 Javascript
JS实现拖拽元素时与另一元素碰撞检测
Aug 27 Javascript
Vue实现指令式动态追加小球动画组件的步骤
Dec 18 Vue.js
AngularJS使用ngOption实现下拉列表的实例代码
Jan 23 #Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
Jan 23 #Javascript
javascript实现全角转半角的方法
Jan 23 #Javascript
jQuery操作Table技巧大汇总
Jan 23 #Javascript
jquery采用oop模式class类的使用示例
Jan 22 #Javascript
jquery日历插件datepicker用法分析
Jan 22 #Javascript
js简单设置与使用cookie的方法
Jan 22 #Javascript
You might like
Smarty局部缓存的几种方法简介
2014/06/17 PHP
关于PHP转换超过2038年日期出错的问题解决
2017/06/28 PHP
PHP7 安装event扩展的实现方法
2019/10/08 PHP
xtree.js 代码
2007/03/13 Javascript
JavaScript库 开发规则
2009/01/31 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
利用javascript解决图片缩放及其优化的代码
2012/05/23 Javascript
Javascript图像处理思路及实现代码
2012/12/25 Javascript
JS文本框不能输入空格验证方法
2013/03/19 Javascript
javascript数组的使用
2013/03/28 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
javascript自然分类法算法实现代码
2013/10/11 Javascript
javascript打开word文档的方法
2014/04/16 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
JS实现单行文字不间断向上滚动的方法
2015/01/29 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
深入理解Promise.all
2018/08/08 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
Javascript的this详解
2019/03/23 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
python中精确输出JSON浮点数的方法
2014/04/18 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python实现i人事自动打卡的示例代码
2020/01/09 Python
固特异美国在线轮胎店:Goodyear Tire
2019/02/23 全球购物
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
偷看我的初中毕业鉴定
2014/01/29 职场文书
2014年宣传工作总结
2014/11/18 职场文书
停电放假通知
2015/04/14 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
Python爬虫数据的分类及json数据使用小结
2021/03/29 Python
Java实现二分搜索树的示例代码
2022/03/17 Java/Android
vue实现简易音乐播放器
2022/08/14 Vue.js