我正在学习Angular.js的指令模块,以及如何创建您自己的工具。
我正在读一本书“掌握乔希·库兹的AngularJS指令”。
这里我举了一个例子,但不太明白。
这是下面的代码
<!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-表达式”有一个代码,
scope.term = scope.term();"scope.term()“是什么意思,函数这个词是从哪里来的?
这是活示例的链接。
发布于 2015-08-24 07:33:32
示例中的所有指令都使用隔离作用域,因为您在指令定义中定义了范围对象。如果您没有使用作用域参数,那么指令的作用域将是它们从何处调用的子作用域。每三种情况的不同之处在于如何使用传递给指令的参数。
在第一个指令中,您使用@传递了一个属性,因此您只能从外部将一个值传递给您的指令。如果更改传递的参数的值,则不影响指令外给定参数的值。所以你可以把它想象成单向绑定。
第二个指令通过使用=符号使用双向绑定。因此,当您更改指令中传递的参数时,更改将返回到将此值传递给您的指令的外部范围。
第三个指令使用&将参数作为表达式传递。使用这种方法,您可以将函数传递给指令,并在指令中调用这些函数。因此,在您的示例中,通过给定的语句$scope.term = $scope.term();将传递的传入函数的返回值赋值给您的作用域。
https://stackoverflow.com/questions/32176395
复制相似问题