在AngularJS中,没有隔离作用域的指令范围属性。
问题的出现原因是在AngularJS中,如果在指令中没有使用隔离作用域(isolated scope),则不能直接扩展父作用域。然而,可以通过在指令的link函数中使用指令标签属性来实现目标。解决方法是在link函数中使用$attributes参数来获取指令标签的属性,并将其赋值给$scope.label变量。具体代码如下:
link: function ($scope, $element, $attributes) { $scope.label = $scope.$eval($attributes.label); }
通过访问下面的链接可以查看一个实时演示:
[http://plnkr.co/edit/2qMgJSSlDyU6VwdUoYB7?p=preview](http://plnkr.co/edit/2qMgJSSlDyU6VwdUoYB7?p=preview)
如果要传递一个字面量(literal),可以直接使用$attributes参数中提供的值,而不需要调用$scope.$eval函数。这样可以避免指令的使用者必须用引号包裹所有的值。具体做法可以参考[stackoverflow.com/a/15671573/3123195](http://stackoverflow.com/a/15671573/3123195)。
以上就是在AngularJS中使用没有隔离作用域的指令范围属性的问题的原因和解决方法。
问题的原因是在AngularJS中,如果指令的作用域没有被隔离,那么在指令中使用的属性如果发生变化,作用域中的变量将不会自动更新。
解决方法是将属性值作为字符串传递,而不是传递引用。在指令中使用$observe方法监听属性的变化,并更新作用域中的变量。
以下是解决方法的代码示例:
在指令中添加$observe方法监听属性的变化,并更新作用域中的变量:
$attributes.$observe('label', function(newValue){ $scope.label = newValue; });
通过这种方式,如果属性值发生变化,作用域中的变量将会动态更新。
以上方法可以实现双向数据绑定,而且不需要使用隔离作用域。