首页 / 知识
angular的scopel指令使用详解
2023-04-11 15:14:00
我们来创建一个自定义指令
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}</style></head><bodyng-app="myApp">
<divng-controller="mainCtrl">
<my-btn></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp.controller('mainCtrl',['$scope',function($scope){
$scope.myClass='primary';
}]);
myApp.directive('myBtn',function(){return{
template:'<inputtype="button"value="按钮"class="{{myClass}}">'
}
});</script></body></html>
1.webp
使用自定义指令像上面一样的确不错,但是如果你想要对每一个指令渲染出来的按钮定制化,则好像不可以,比如下面我们创建一堆这个自定义指令,他们长得一模一样:
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}</style></head><bodyng-app="myApp">
<divng-controller="mainCtrl">
<my-btn></my-btn>
<my-btn></my-btn>
<my-btn></my-btn>
<my-btn></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp.controller('mainCtrl',['$scope',function($scope){
$scope.myClass='primary';
}]);
myApp.directive('myBtn',function(){return{
template:'<inputtype="button"value="按钮"class="{{myClass}}">'
}
});</script></body></html>
2.webp
一种思路是把这几个自定义的指令按钮放到不同的控制器里面,然后控制器里通过$scope上下文传递不同的值:
<!DOCTYPEhtml><html><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:green;
}.default{background:gray;
}</style></head><bodyng-app="myApp">
<divng-controller="aCtrl">
<my-btn></my-btn>
</div>
<divng-controller="bCtrl">
<my-btn></my-btn>
</div>
<divng-controller="cCtrl">
<my-btn></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp.controller('aCtrl',['$scope',function($scope){
$scope.myClass='primary';
}]);
myApp.controller('bCtrl',['$scope',function($scope){
$scope.myClass='success';
}]);
myApp.controller('cCtrl',['$scope',function($scope){
$scope.myClass='default';
}]);
myApp.directive('myBtn',function(){return{
template:'<inputtype="button"value="按钮"class="{{myClass}}">'
}
});</script></body></html>
3.webp
这样写太麻烦了,所以我们的angular为我们的自定义指令提供了一个配置项叫scope,所以,我们可以如下这样写:
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:green;
}.default{background:gray;
}</style></head><bodyng-app="myApp">
<divng-controller="Controller">
<my-btnb="className1"></my-btn>
<my-btnb="className2"></my-btn>
<my-btnb="className3"></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp
.controller('Controller',['$scope',function($scope){
$scope.className1='primary';
$scope.className2='success';
$scope.className3='default';
}])
.directive('myBtn',function(){return{
scope:{
a:'=b'
},
template:'<inputtype="button"value="按钮"class="{{a}}">'
}
});</script></body></html>
要看懂上面的只要注意两点:
这里的独立作用域里面的a代表的是template里面的模型a
=b代表的是要angular去寻找视图里面的当前指令的属性b
属性b的值需要去外部作用域里面去寻找
如果你想在指令作用域里绑定的模型的名字和外部使用的时候的属性名一样,可以省写成如下:
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:green;
}.default{background:gray;
}</style></head><bodyng-app="myApp">
<divng-controller="Controller">
<my-btna="className1"></my-btn>
<my-btna="className2"></my-btn>
<my-btna="className3"></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp
.controller('Controller',['$scope',function($scope){
$scope.className1='primary';
$scope.className2='success';
$scope.className3='default';
}])
.directive('myBtn',function(){return{
scope:{
a:'='
},
template:'<inputtype="button"value="按钮"class="{{a}}">'
}
});</script></body></html>
当然,上面的=号是双向数据绑定:
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:green;
}.default{background:gray;
}</style></head><bodyng-app="myApp">
<divng-controller="Controller">
<my-btna="abc"></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp
.controller('Controller',['$scope',function($scope){
$scope.abc='我是初始内容';
}])
.directive('myBtn',function(){return{
scope:{
a:'='
},
template:'<inputtype="text"ng-model="a"><span>{{a}}</span>'
}
});</script></body></html>
如果只是想单向的数据通信,可以用@符号:
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:red;
}.default{background:red;
}</style></head><bodyng-app="myApp">
<divng-controller="Controller">
<my-btna="primary"></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp
.controller('Controller',['$scope',function($scope){
$scope.mm='primary';
}])
.directive('myBtn',function(){return{
scope:{
a:'@'
},
template:'<inputtype="button"value="按钮"class="{{a}}">'
}
});</script></body></html>
如果想用ng-class,也是可以的:
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:red;
}.default{background:red;
}</style></head><bodyng-app="myApp">
<divng-controller="Controller">
<my-btna="primary"></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp
.controller('Controller',['$scope',function($scope){
$scope.mm=true;
}])
.directive('myBtn',function(){return{
scope:{
a:'@'
},
template:'<inputtype="button"value="按钮"ng-class="{primary:a}">'
}
});</script></body></html>
最后,还有一个scope可以设置是引用外部作用域的方法
<!DOCTYPEhtml><htmllang="en"><head>
<metacharset="UTF-8">
<title>Document</title>
<style>
.primary{background:red;
}.success{background:red;
}.default{background:red;
}</style></head><bodyng-app="myApp">
<divng-controller="Controller">
<my-btnfn2="fn()"></my-btn>
</div>
<scriptsrc="node_modules/angular/angular.min.js"></script>
<script>
varmyApp=angular.module('myApp',[]);
myApp
.controller('Controller',['$scope',function($scope){
$scope.fn=function(){
alert(11);
}
}])
.directive('myBtn',function(){return{
scope:{
fn1:'&fn2'
},
template:'<inputtype="button"value="按钮"ng-click="fn1()">'
}
});</script></body></html>
本文转载自中文网 |
最新内容
相关内容
python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保python的闭包函数是什么
python的闭包函数是什么,代码,工作,函数,培训,程序,外部,个数,变量,嵌套,赋值,python中的闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函python的time怎么使用
python的time怎么使用,时间,平台,单位,实时,标准,培训,术语,模块,函数,精度,python中的time模块time这个模块提供各种与时间相关的函数。相关python三引号怎么使用
python三引号怎么使用,培训,代码,名字,引号,字符串,注释,下面,定义,以上,作用,python中的三引号,3个单引号及3个双引号,通常用来换行书写代码,或python变量怎么使用
python变量怎么使用,培训,信息,数字,变量,字母,空格,开头,关键字,意义,规则,python中的变量主要是用来存贮信息的。message="HelloPythonworpython怎么使用列表
python怎么使用列表,位置,培训,公式,列表,元素,表示,末尾,切片,倒数,顺序,python列表的简单操作1.在列表末尾添加元素:sth.append()2.在列表中pythonc语言取余和python取余的区
pythonc语言取余和python取余的区别,培训,资料,语言,负数,区别,被除数,符号,除数,规定,余数,今天看书发现python与C的负数取余运算结果不同,python帮助文档怎么使用
python帮助文档怎么使用,培训,文档,函数,模块,以下内容,参数,方法,以上,更多,内容,在python命令行中输入help(),然后再次输入time,可以获得很详python如何定义接受参数的函数
python如何定义接受参数的函数,信息,培训,位置,参数,函数,列子,效果,定义,更多,内容,python中的函数可以有参数,也可以无参数,参数可以分为默认python能判断一个变量的类型吗
python能判断一个变量的类型吗,培训,类型,对象,变量,函数,实例,语法,以上,参数,结果,python中是可以判断对象的类型的,判断python中的对象类型python类和对象的区别是什么
python类和对象的区别是什么,培训,主体,汽车,状态,对象,定义,属性,方法,实例,区别,类和对象1、类和对象得区别:类是对客观世界中事物得抽象,而