angularJs1.x学习——指令(directive)之scope

scope 指令的作用域

可选 ,默认是false
false: 使用父作用域,指令中对属性的修改,会直接 作用到父级作用域中
true: 从父作用域继承 ,并创建一个新的作用域对象 ,指令 中可以访问 父级的作用域,修改不会影响 到父级
{}: 创建一个隔离作用域,不能访问 父级的作用域,修改也不会影响 到父级

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>scope</title>
    <link type="text/css" rel="stylesheet" href="">
    <script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
    <script type="text/javascript" src="js/angular.min.js"></script>
</head>
<body ng-app="myApp">
<div ng-controller='MainController'>
    父亲: {{name}}
    <input ng-model="name" />
    <div my-directive></div>
    <br />
    <input type="text" ng-model="color" placeholder="Enter a color"/>
    <hello-world></hello-world>
</div>
<script>
    angular.module('myApp',[])
        .controller('MainController',['$scope',function ($scope) {
            $scope.name='哈士奇'
        }])
        .directive('myDirective',function () {
            return {
                restrict:'EA',
                scope:false,
                //儿子继承父亲的值,改变父亲的值,儿子的值也随之变化,反之亦如此。(继承不隔离)
                /*scope:true,*/
                //儿子继承父亲的值,改变父亲的值,儿子的值随之变化,但是改变儿子的值,父亲的值不变。(继承隔离)
                /*scope:{},*/
                //没有继承父亲的值,所以儿子的值为空,改变任何一方的值均不能影响另一方的值。(不继承隔离)
                template:'<div>儿子:{{ name }}<input ng-model="name"/></div>'
            }
        })
        .directive('helloWorld',function () {
            return{
                restrict:'EA',
                replace:true,
                template:'<p style="background-color:{{color}}">Hello World</p>'
            }
        })
</script>
</body>
</html>

隔离作用域的绑定策略

@: 本地作用域属性 ,使用@符号将子级作用域同DOM属性的值进行绑定。子级作用域可以
    使用父级作用域的变量,但内部作用域的变量改变,不会影响外部作用域的绑定变量, 
    即单向绑定。   ***注意绑定的方式{{变量}}***
=: 双向绑定:通过=可以将子级作用域上的属性同父级作用域上的属性进行双向的数据绑定。
    就像普通的数据绑定一样,子级作用域上会属性变量变化会引起父级作用域上数据模型中的改变,
    即双向绑定。 ***注意绑定的方式{{变量}}***
& 与父级的方法绑定
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>scope</title>
    <link type="text/css" rel="stylesheet" href="">

</head>
<body ng-app="myApp">
<div>
    <input type="text" ng-model="color1" placeholder="Enter a color1"/>
    <hello-world1 color-attr='{{color1}}'></hello-world1>
    <!--注意这里设置了color-attr属性,{{color}}-->
    这是'@'绑定:    {{color1}}
    <br />
    <br />
    <br />
    <input type="text" ng-model='color' placeholder="Enter a color2"/>
    <hello-world2 color-attr='color2'></hello-world2>
    <!--注意这里设置了color-attr属性,color2-->
    这是'='绑定:    {{color2}}
</div>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script>
    var app = angular.module('myApp', []);
    app.directive('helloWorld1', function () {
        return {
            restrict: 'EA',
            replace: true,
            scope: {
                color1: '@colorAttr' 
                //指明了隔离作用域中的属性color1应该绑定到属性colorAttr
                //单向绑定
            },
            template: '<input type="text" ng-model="color1"></div></div>'
        }
    });
    app.directive('helloWorld2', function () {
        return {
            restrict: 'EA',
            replace: true,
            scope: {
                color2: '=colorAttr' 
                //指明了隔离作用域中的属性color2应该绑定到属性colorAttr
                //双向绑定
            },
            template: '<div style="background-color:{{color2}}">Hello World<div>
            <input type="text" ng-model="color2"></div></div>'
        }
    });
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>scope</title>
    <link type="text/css" rel="stylesheet" href="">

</head>
<body ng-app="myApp">
<div ng-controller='MainController'>
    <input type="text" ng-model="name" placeholder="Enter a color"/>
    {{name}}
    <hello-world saysomething999="say();" name="AAA"></hello-world> //注意这里
</div>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/angular.min.js"></script>
<script>
    var app = angular.module('myApp',[]);
    app.controller('MainController',function($scope){
        $scope.say = function(){
            alert('hello');
        };
        $scope.name = 'leifeng';
    });
    app.directive('helloWorld',function(){
        return {
            scope:{
                saysomething:'&saysomething999',//绑定父级的方法
                name:'@'//单向0绑定父级的name
            },
            restrict: 'AE',
            replace: true,
            template: '<button type="button" ng-bind="name" ng-init="saysomething();"></button>'
        }
    });
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值