指令作用域始终为空
Directive Scope always empty
检查此JSFiddle
app.directive('rateClass', function() {
function link ($scope, $element, $attrs) {
var className = '';
if($scope.ranking > 9)
className = 'ranked-excelent';
else if($scope.ranking > 6)
className = 'ranked-good';
else if($scope.ranking > 3)
className = 'ranked-regular';
else if($scope.ranking > 0)
className = 'ranked-bad';
console.log($scope, className);
};
return {
scope: {
rank: '='
},
restrict: 'AEC',
link: link
};
});
我的指令有效,实际上它执行链接函数,但变量className没有被填充,即使$scope获得了rank属性(checkingconsole.log),当我访问它时,$scope.rank
返回一个空字符串。
这里发生了什么?
更新
查看完整的演示
更新2使用此解决
app.directive('rateClass', function() {
var getClass = function (val) {
var className = 'not-ranked';
if(val > 9)
className = 'ranked-excelent';
else if(val > 6)
className = 'ranked-good';
else if(val > 3)
className = 'ranked-regular';
else if(val > 0)
className = 'ranked-bad';
return className;
}
function link ($scope, $element, $attrs) {
$scope.$watch($attrs.score, function (value) {
$element.addClass(getClass(value));
})
};
return {
link: link
};
});
您有一个打字错误,您使用了$scope.ranking
而不是$scope.rank
function link ($scope, $element, $attrs) {
var className = '';
if($scope.rank > 9)
className = 'ranked-excelent';
else if($scope.rank > 6)
className = 'ranked-good';
else if($scope.rank > 3)
className = 'ranked-regular';
else if($scope.rank > 0)
className = 'ranked-bad';
console.log($scope, className);
};
更新的小提琴:http://jsfiddle.net/cobo3wzu/2/
注意:在您编辑的完整演示版本中,您应该放入:
$scope.$watch('score', function (value) {
value = parseFloat(value) || 0;
$element.addClass(getClass(value));
})
而不是:
$scope.$watch($attrs.score, function (value) {
value = parseFloat(value) || 0;
$element.addClass(getClass(value));
})
这是因为,在目录中,score
属性绑定到了scope
。通过检查$attrs.score
,实际上就是在检查这个结果:"local.promedio_general"
您将范围属性定义为rank
,但在链接函数中,您引用了一个名为ranking
的变量
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 对父作用域的指令更新延迟了一步
- 两个指令创建新的继承的和隔离的作用域-元素得到哪个
- AngularJS指令隔离作用域
- 访问多个指令的隔离作用域
- 如何在html中以角度显示自定义指令的作用域
- 如何在隔离作用域指令中访问此作用域变量
- 如何为通过ng-view指令或ng-controller指令创建的每个新作用域设置侦听器
- AngularJs,在没有隔离的情况下将指令属性添加到作用域
- 如何在angularjs中将多个作用域变量传递到自定义指令中
- 从指令链接函数监视控制器作用域
- 当指令中已经给定作用域时,如何访问控制器中声明的函数
- AngularJS:如何调用指令中定义的函数'控制器的作用域
- 无作用域指令-如何获取数据
- AngularJS:ng repeat未在作用域指令内执行
- 隔离作用域指令不会对更改做出反应:angularjs
- 带有双向绑定的孤立作用域指令不能反映控制器作用域的变化
- 在隔离作用域指令中,在作用域上定义变量和在控制器上定义变量之间有什么区别吗?
- 为什么我应该在 AngularJS 中使用隔离的作用域指令
- angularJS无法获取作用域.指令中的数据