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

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

时间: 2024-07-30 10:17:00

AngularJS中监视Scope变量以及外部调用Scope方法的相关文章

通过几段代码,理清angularJS中的$injector、$rootScope和$scope的概念和关联关系

$injector.$rootScope和$scope是angularJS框架中比较重要的东西,理清它们之间的关系,对我们后续学习和理解angularJS框架都非常有用. 1.$injector其实是一个IOC容器,包含了很多服务(类似于spring框架中的bean),其它代码能够通过       $injector.get("serviceName")的方式,从injector中获取所需要的服务.详情参考这篇文章 2.scope是angularJS中的作用域(其实就是存储数据的地方)

AngularJs 如何监视外部变量是否改变? 如何使用$cookieStore保存cookie?

1. 如何监视外部变量是否改变? 如果我们要求:在$scope之外改变一个外部变量时,触发一些操作.我们可以将外部变量写进$watch中,如图中所示.返回的n表示newValue,即新的值.o表示old value,即旧值.如果有些特殊操作,我们可以直接判断n或o的值.比如这里的if(n==true)就是判断新的值是否等于true. 2. 如何操作cookie? 当AngularJs页面刷新时,会刷新js,之前页面上的变量都会重置:或者我们用超链接打开一个新窗口的AngularJs页面时,新窗口

angularjs中ajax请求时传递参数的方法

method1方法使用的是params参数,该用法会把参数直接附加到url中 method2方法使用的是data参数,该参数会把页面参数类型从默认的multipart/form-data改为application/x-www-form-urlencoded类型,并且将传递的data解析为字符串,该方法会以post参数的方式传递 下面是代码部分: <html ng-app="myApp"> <head> <title>angularjs-ajax<

关于CMD中延迟环境变量嵌套的实现方法

在我昨天做的一个bat中(自动按日期重命名文件名)涉及到这方面的问题 以前涉及到这里时就想别的办法替代过去,今天好好扒出来说说: 实现变量嵌套的2种方法: 1,使用call实现变量嵌套 变量嵌套:即在变量中嵌套变量,将变量的值作为另外一个变量的名字(或一部分名字) 这种用法很多语言都支持,如PHP的$$p,如C语言的**p二级指针,但在BAT中这是第一次涉及 如:(需要通过a输入10) set a=1&set b1=10 call,echo %%b%a%%% call 这里实际是对命令行进行重新

angularJs中ng一些内置的工具方法:

1.angular.equals: (1)两个参数满足===比较返回true;(2)两个参数是同一种类型,同时他们的每一个属性通过angular.equals都是返回true:(3)两个都是NAN(在js中虽然NAN==NAN为false,但是这里为true);(4)两个对象代表同一个正则表达式,如/abc/==/abc/(虽然在js中返回false) 2.angular.copy: 创建来源source的一个深度克隆对象,可以是一个对象或者数组.如果没有指定destination那么就会返回一

Python:字符串中引用外部变量的3种方法

方法一: 1 username=input('username:') 2 age=input('age:') 3 job=input('job:') 4 salary=input('salary') 5 6 info1=''' 7 -----------------------info of %s---------------------------- 8 Name:%s 9 Age:%s 10 Job:%s 11 Salary:%s 12 ''' %(username,username,age

avaScript文件中调用AngularJS内部方法或改变$scope变量

需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controller来获取app var appElement = document.querySelector('[ng-controller=mainController]'); 然后在获取$scope变量: var $scope = angular.element(appElement).scope(); 如

JavaScript调用AngularJS的函数/$scope/变量

使用背景: 需要在其他JavaScript文件中调用AngularJS内部方法或改变$scope变量,同时还要保持双向数据绑定: 首先获取AngularJS application: 方法一:通过controller来获取app var appElement = document.querySelector('[ng-controller=mainController]'); 然后在获取$scope变量: var $scope = angular.element(appElement).scop

Angularjs中this的指向

在Angularjs中this的指当前的scope. <a class=" ng-click="remove(this)"></a> <!--this指的是a标签作用域下的scope--> <script> app.controller('myCtrl',function($scope){ $scope.remove = function (scope) { scope.remove(); }; }); </script&