嗨哪个更好?有什么不同?有什么优点和缺点?
以下是两者之间的比较代码:
范围:{ngModel:' =' }
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
<div ng-app="app">
<input ng-model="code"></my-directive>
</div>
<script type="text/javascript">
app = angular.module('app', []);
app.directive('input', function(){
return {
scope: {
ngModel: '='
},
link: function(scope, element, attrs){
scope.$watch('ngModel', function(value){
console.log(value);
})
}
}
});
</script>
</body>
</html>
要求:&#39; ngModel&#39;,
<!DOCTYPE html>
<html>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
<body>
<div ng-app="app">
<input ng-model="code"></my-directive>
</div>
<script type="text/javascript">
app = angular.module('app', []);
app.directive('input', function(){
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel){
attrs.$observe('ngModel', function(value){
scope.$watch(value, function(newValue){
console.log(newValue);
});
});
}
}
});
</script>
</body>
</html>
PS 请注意,两个代码都是一样的。 使用模型的值
登录控制台答案 0 :(得分:7)
使用范围:{ngModel:'='} ,
它创建了一个带隔离范围的指令,这里基本上是作用域被隔离并且它不从父$ scope继承,但是值被传递到该指令所需的指令中。如果你使用'='那么它的双向数据绑定。
优点和缺点取决于您的要求。
优势:
$scope.$watch
,以便更新指令中的视图
如果父范围变量的值发生变化。 '='完成这项工作。reusable component
,可以在您的应用程序中的多个位置使用。directive controller
中使用,即使指令中不存在链接功能。缺点:
require:'ngModel'
<强>优点:强>
publish-subscribe design pattern
)。<强>缺点强>
link function
以获取父控制器及其范围变量和方法。$scope.$watch
来更新视图。 this
和{ {1}}