AngularJS指令传递string

该指令试图创build一个名为进度条的HTML元素,用于在页面移动页面时跟踪进度。 我正在尝试开发它以用于: <progress-bar progress='1' max='6' error="true"></progress-bar>

我只是试图将HTML中的^^元素的信息传递给我的指令,并处理信息以适当地更改进度条。

这是工作的“进步”和“最大”采取整数值,但由于某种原因,注释掉的代码,这将处理“错误”(这是一个string)是造成问题。 我是angularJS的新手,所以我很抱歉,如果这听起来令人困惑或不清楚,请询问是否需要详细说明。 提前致谢!

 app.directive('progressBar', function(){ var compileProgressBar = function(scope, elem, attrs) { var append = '<nav class="navbar navbar-fixed-bottom navbar-footer" role="navigation">\ <div class="container">\ <div class="row">'; var i = 1; while (i <= parseInt(scope.max)) { if (i <= parseInt(scope.progress)) { //if (scope.error == "true"){ //... //} //else { append += '<div class="col-xs-1"><div class="circle-filled"><center>'+i+'</center></div></div>' //} } else { append += '<div class="col-xs-1"><div class="circle-hallow"><center>'+i+'</center></div></div>' } i++; } append += '</div></div></nav>' elem.append(append); elem.bind('click', function(){ if (scope.progress > 1) { history.back(); scope.$apply(); } }); } return { restrict: 'AE', scope: { max: '=max', progress: '=progress' //error: '=error' }, link: compileProgressBar } 

});

在您的指令中,您正在使用全局范围中的属性双向绑定到指令局部范围。

在这种模式下,html中的属性值被评估为一个expression式,因此您的指令试图将其本地scope.error绑定到作为expression式求的结果。

当你testingscope.error == "true" ,你实际上正在testingtrue == "true" ,这在javascript中计算为false

要解决您的问题,您可以:

  • 调用您的指令时使用带引号的string:

     <progress-bar progress='1' max='6' error="'true'"></progress-bar> 
  • 或者在你的指令中改变你的绑定模式,因为你不需要双向绑定。 @variables始终是stringtypes。

     return { restrict: 'AE', scope: { max: '@max', progress: '@progress', error: '@error' }, link: compileProgressBar } 

您可以在Angular $ compile文档中find更多关于绑定模式的信息