作用域在一个angular应用中是以树形体现的,根作用$rootScope就位于最顶层,从它往下挂着各级作用域.每一级作用域上面挂着变量和方法,供所属的视图调用.可以这么说每个controller都会有自己的scope,所有的scope都是属于$rootScope的子或者子的子...
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <input type="text" ng-model="a"/> <div>{{a}}</div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { }); </script> </body> </html>
如果想在控制器中使用根作用域,可以注入$rootScope.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> {{b}} <div ng-controller="OuterCtrl"> <span>{{a}}</span> <div ng-controller="InnerCtrl"> <span>{{a}}</span> </div> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.a = 1; }) .controller('OuterCtrl', function($scope) { $scope.b = 4444; }) .controller('InnerCtrl', function($scope) { }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> {{b()}} <div ng-controller="OuterCtrl"> <span>{{a()}}</span> <div ng-controller="InnerCtrl"> <span>{{a()}}</span> </div> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.a = function(){ return 1 } }) .controller('OuterCtrl', function($scope) { $scope.b = function(){ return 444 } }) .controller('InnerCtrl', function($scope) { }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <div ng-controller="OuterCtrl"> <span>OuterCtrl: {{a}}</span><br/> <div ng-controller="InnerCtrl"> <span>InnerCtrl: {{a}}</span> <br/> <button ng-click="a=a+1">InnerCtrl--a++</button> </div> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.a = 1; }) .controller('OuterCtrl', function($scope) { }) .controller('InnerCtrl', function($scope) { }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <div ng-controller="OuterCtrl"> <span>OuterCtrl: {{data.a}}</span><br/> <div ng-controller="InnerCtrl"> <span>InnerCtrl: {{data.a}}</span> <br/> <button ng-click="data.a=data.a+1">InnerCtrl--a++</button> </div> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.data = { a: 1 }; }) .controller('OuterCtrl', function($scope) { }) .controller('InnerCtrl', function($scope) { }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <div ng-controller="OuterCtrl"> <span>OuterCtrl: {{a}}</span><br/> <div ng-controller="InnerCtrl"> <span>InnerCtrl: {{a}}</span> <br/> <button ng-click="$parent.a=a+1">InnerCtrl--a++</button> </div> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.a=1 }) .controller('OuterCtrl', function($scope) { }) .controller('InnerCtrl', function($scope) { }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl as instanceB"> <div ng-controller="OuterCtrl"> <span>OuterCtrl: {{instanceB.a}}</span><br/> <div ng-controller="InnerCtrl"> <span>InnerCtrl: {{instanceB.a}}</span> <br/> <button ng-click="instanceB.a=instanceB.a+1">InnerCtrl--a++</button> </div> </div> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function() { this.a=1 }) .controller('OuterCtrl', function() { }) .controller('InnerCtrl', function() { }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <ul> <li ng-repeat="item in arr track by $index">{{item}}</li> </ul> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.arr = [1, 2, 3]; }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <div>outer: {{sum1}}</div> <ul> <li ng-repeat="item in arr track by $index"> {{item}} <button ng-click="sum1=sum1+item">increase</button> <div>inner: {{sum1}}</div> </li> </ul> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.sum1=0; $scope.arr = [1, 2, 3]; }) </script> </body> </html>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> <div>outer: {{sum1}}</div> <div>outer: {{sum2}}</div> <ul> <li ng-repeat="item in arr track by $index"> {{item}} <button ng-click="$parent.sum2=sum2+item">increase</button> <div>inner: {{sum2}}</div> </li> </ul> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { $scope.sum1=0; $scope.sum2=0; $scope.arr = [1, 2, 3]; }) </script> </body> </html>
var newScope = scope.$new();
<script type="text/javascript"> $(function(){ var $li_1 = $("<li></li>"); // 创建第一个<li>元素 var $li_2 = $("<li></li>"); // 创建第二个<li>元素 var $parent = $("ul"); // 获取<ul>节点。<li>的父节点 $parent.append($li_1); // 添加到<ul>节点中,使之能在网页中显示 $parent.append($li_2); // 可以采取链式写法:$parent.append($li_1).append($li_2); }); </script>
<script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { var child = { a: 1 }; child.a++; }) </script>
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script> </head> <body> <div ng-app="myApp" ng-controller="myCtrl"> </div> <script> var app = angular.module('myApp', []); app.controller('myCtrl', function($scope) { var child = $scope.$new(); child.a = 1; child.$watch("a", function(newValue) { alert(newValue); }); $scope.change = function() { child.a++; }; }) </script> </body> </html>
$scope.$emit("someEvent", {});
$scope.$broadcast("someEvent", {});
$scope.$on("someEvent", function(e) { // 这里从e上可以取到发送过来的数据 });
$scope.$on("someEvent", function(e) { e.stopPropagation(); });
$scope.$on("someEvent", function(e) { e.preventDefault(); });
$scope.$on("someEvent", function(e) { if (e.defaultPrevented) { return; } });
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <script src="http://apps.bdimg.com/libs/angular.js/1.3.13/angular.js"></script> <script> var app = angular.module('plunker', []); app.controller('MainCtrl', function ($scope) { $scope.name = true; }); app.directive('myDirective', function ($compile) { return { restrict: 'AE', //attribute or element scope: { myDirectiveVar: '=', //bindAttr: '=' }, template: '<button>' + 'click me</button>', replace: true, //require: 'ngModel', link: function ($scope, elem, attr, ctrl) { elem.bind('click', function () { $scope.$apply(function () { $scope.myDirectiveVar = !$scope.myDirectiveVar; alert($scope.myDirectiveVar); }); }); //var textField = $('input', elem).attr('ng-model', 'myDirectiveVar'); // $compile(textField)($scope.$parent); } }; }); </script> </head> <body ng-app="plunker" ng-controller="MainCtrl"> This scope value <input type="checkbox" ng-model="name"> <my-directive my-directive-var="name"></my-directive> </body> </html>