首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的指令是否使用定义、隔离或子作用域?

我的指令是否使用定义、隔离或子作用域?
EN

Stack Overflow用户
提问于 2015-08-24 07:13:28
回答 1查看 39关注 0票数 0

我正在学习Angular.js的指令模块,以及如何创建您自己的工具。

我正在读一本书“掌握乔希·库兹的AngularJS指令”。

这里我举了一个例子,但不太明白。

这是下面的代码

代码语言:javascript
复制
<!DOCTYPE html>
<html lang="en" ng-app="MyApp">
<head>
    <title>Recipe 02 example 01</title>
    <script type="text/javascript" src="D:\Rahul Shivsharan\JavaScript-Framework\AngularJS\angular.js"></script>
    <script type="text/javascript" src="D:\Rahul Shivsharan\JavaScript-Framework\jQuery\jquery-1.11.1.js"></script>
    <script type="text/javascript" src="D:\Rahul Shivsharan\JavaScript-Framework\BootstrapCSS\bootstrap-3.2.0-dist\js\bootstrap.js"></script>
    <link rel="stylesheet" href="D:\Rahul Shivsharan\JavaScript-Framework\BootstrapCSS\bootstrap-3.2.0-dist\css\bootstrap.css"></link>
    <link rel="stylesheet" href="D:\Rahul Shivsharan\JavaScript-Framework\BootstrapCSS\bootstrap-3.2.0-dist\css\bootstrap-theme.css"></link>
    <script type="text/javaScript">
        angular.module("MyApp",[]);

        (function(){
            angular.module("MyApp").controller("myCtrl",myCtrl);
            angular.module("MyApp").directive("bbString",bbString);
            angular.module("MyApp").directive("bbTwoString",bbTwoString);
            angular.module("MyApp").directive("bbExpression",bbExpression);

            function myCtrl($scope){
                $scope.actorName = "Jim Carry";
            };

            function bbString(){
                var obj = {
                    scope : {
                        name : "@abbraKaDabraa"
                    },
                    template : "<input ng-model='name' />"  
                }

                return obj;
            };

            function bbTwoString(){
                var obj = {
                    scope : {
                        name : "=theName"
                    },
                    template : "<input ng-model='name' />"  
                }
                return obj;
            };

            function bbExpression(){
                var obj = {
                    scope : { term : "&" },
                    template : "<input ng-model='term' />",
                    link : function(scope,element,attrs){                           
                        scope.term = scope.term();
                    }
                }

                return obj; 
            }
        })();
    </script>
</head>
<body ng-controller="myCtrl">
    <div class="container">
        <div class="well">
            <div bb-string abbra-ka-dabraa="{{actorName}}"></div>
            <p><b>{{actorName}}</b></p>
            <div bb-expression term="newTerm = actorName + ' Some Extra content'"></div>    
            <br/>
            <div bb-two-string the-name="actorName"></div>
        </div>
    </div>      
</body>     

从上面的例子你可以看到,

我创建了三个指令"bb-string“、”bb-2-string“和”bb-表达式“。

在阅读了这本书之后,我理解的是所有的指令都有定义范围。

我从定义作用域这一术语中所理解的是,“指令从其父指令获得的范围”。

所以,无论我是否正确理解,还是指令"bb-string“有一个隔离作用域,而指令”bb-双字符串“有一个定义作用域。?

如果所有指令都使用“定义作用域”,那么这些作用域是否继承自控制器"myCtrl“作用域?

最后一次询问,

指令“bb-表达式”有一个代码,

代码语言:javascript
复制
scope.term = scope.term();

"scope.term()“是什么意思,函数这个词是从哪里来的?

这是活示例的链接。

第一个指令示例

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-24 07:33:32

示例中的所有指令都使用隔离作用域,因为您在指令定义中定义了范围对象。如果您没有使用作用域参数,那么指令的作用域将是它们从何处调用的子作用域。每三种情况的不同之处在于如何使用传递给指令的参数。

在第一个指令中,您使用@传递了一个属性,因此您只能从外部将一个值传递给您的指令。如果更改传递的参数的值,则不影响指令外给定参数的值。所以你可以把它想象成单向绑定。

第二个指令通过使用=符号使用双向绑定。因此,当您更改指令中传递的参数时,更改将返回到将此值传递给您的指令的外部范围。

第三个指令使用&将参数作为表达式传递。使用这种方法,您可以将函数传递给指令,并在指令中调用这些函数。因此,在您的示例中,通过给定的语句$scope.term = $scope.term();将传递的传入函数的返回值赋值给您的作用域。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32176395

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档