Javascript Angular JS指令不更新范围变量
我试图在angularJs中构建一个简单的指令,它通过属性接受一些配置选项,但是如果没有设置属性,我想为属性设置默认值 以下是我如何描述我的工作范围:Javascript Angular JS指令不更新范围变量,javascript,angularjs,Javascript,Angularjs,我试图在angularJs中构建一个简单的指令,它通过属性接受一些配置选项,但是如果没有设置属性,我想为属性设置默认值 以下是我如何描述我的工作范围: scope : { classes: '@', progress: '@' } 这些属性以以下方式显示在视图中: <div class="{{classes}}"> <div style="width: {{progress}}%;" class="b
scope : {
classes: '@',
progress: '@'
}
这些属性以以下方式显示在视图中:
<div class="{{classes}}">
<div style="width: {{progress}}%;" class="bar"></div>
</div>
以下是控制台输出:
undefined undefined
progress progress-warning 99
因此,似乎在范围内正确设置了值。但是,在实际的html输出中,不会呈现属性。以下是生成的HTML:
<div class="">
<div class="bar" style="width: %;"></div>
</div>
但是,如果我在从html调用属性时内联提供这些属性,例如:
<my-directive data-progress="60" data-classes="progress" />
然后它会很好地显示出来:
<div class="progress" data-progress="60" data-classes="progress">
<div class="bar" style="width: 60%;"></div>
</div>
我的问题是,当我只调用
时,为什么不从link函数中设置进度和类的默认值?(尽管在控制台中显示确实如此)将范围更改为
scope: {
ngModel: '@'
}
试试这个:
if (typeof scope.progress === 'undefined') {
attrs.$set('progress', 99);
}
link: function(scope, element, attrs) {
scope.classes = attrs.classes || 'progress progress-warning';
scope.progress = attrs.progress || 99;
}
并设置:
<div class="bar" style="width: {{progress}}%;"></div>
看这个。如果未声明数据进度
,或者如果数据进度=”
尝试以下操作,则将设置99
:
if (typeof scope.progress === 'undefined') {
attrs.$set('progress', 99);
}
link: function(scope, element, attrs) {
scope.classes = attrs.classes || 'progress progress-warning';
scope.progress = attrs.progress || 99;
}
您可以放弃指令的作用域:{classes:'@',progress:'@}
部分
我看你写指令有点困难。看看我最近实现的。也许它会帮助您总结您的工作。您是否尝试使用scope.$apply()?如果可以,发布一个plunker或fiddle?您不需要执行
范围。$apply()
您可以发布完整的指令吗?@DeividiCavarzan如果我将代码放在范围内的link函数中,我会得到摘要。$applyOk我的错,我没有看到您正在更改link函数。这是可行的,但问题是,现在,如果我尝试在标记中指定属性,例如,
没有任何效果,并且它仍然停留在进度上,作为99,这是没有给定值时的默认值。这是我尝试此操作时的输出:
@ClickUpvote我已经更新了plunker,以便在更改值时查看div宽度。在本例中,我将{{progress}}插入到宽度声明中。这就是您要寻找的吗?当您包含指令时,您已经提供了进度。您正在执行
。如果我这样做,它也对我有效,但是我想要的是简单地执行
,并将其设置为progress
和classes
,其中包含一些默认值case@ClickUpvote但如果删除属性,它也会起作用。。。我现在已删除并使用默认值。。。你能再查一下吗?太好了。谢谢我之前问过的指令现在可以正常工作了,这只是针对其他指令。当我执行attrs.progress
时,为什么我在attrs.progress | 99
时没有在attrs.progress
上得到未定义的错误?此语句检查变量是否为null
或未定义
,如果为true,指定第二个值。@DeividiCavarzan有趣的是,我认为有必要检查typeof
。它在IE中也可以工作,还是只在firefox/chrome中可以工作?实际上,它检查任何计算结果为false
,而在Javascript中,许多事情都是这样做的(包括null和未定义)。出于显而易见的原因,它仅适用于非布尔值。