Javascript 如何将Razor布尔变量传递给Angular指令?
我的cshtml文件中有一个布尔变量。当我试图将它传递给我的Angular指令时,它被接收为“False”,而不是“False”。如果我将其硬编码为“false”(小写),它也不起作用 我的cshtml文件:Javascript 如何将Razor布尔变量传递给Angular指令?,javascript,c#,angularjs,razor,boolean,Javascript,C#,Angularjs,Razor,Boolean,我的cshtml文件中有一个布尔变量。当我试图将它传递给我的Angular指令时,它被接收为“False”,而不是“False”。如果我将其硬编码为“false”(小写),它也不起作用 我的cshtml文件: @{ var myVar = false; } <some-directive test="@myVar"></some-directive> 您的作用域应为“=”而不是“@” angular.module('someApp') .directive
@{
var myVar = false;
}
<some-directive test="@myVar"></some-directive>
您的作用域应为“=”而不是“@”
angular.module('someApp')
.directive('someDirective', function () {
return {
restrict: 'E',
scope: {
test: '='
},
link: function ($scope, element, attrs) {
console.log($scope.test) // false
console.log(!$scope.test) // true
console.log(!!$scope.test) // false
}
}
});
你可以找到部分答案 特别是对于角度,使用指令变量作为
test:'='
而不是test:'@'
。这样,您的变量将被解析为值为“false”的布尔值,而不是文本“false”
另外,在Razor文件中,尝试以下方法将“False”转换为“False”:
@{
var myRazorVar=false;
}
@*或*@
由于两种语言都区分大小写,并且对布尔值(即使是数字)使用不同的模式,因此您可以使用:
<some-directive test="@Json.Encode(myVar)"></some-directive>
将相应地将C#数据格式化为javascript。但是,我非常确定您还需要使用
=
绑定。使用@
将布尔值视为一个字符串。如果您使用的函数返回True或False,我也可以使用上面的
。
@{
var myRazorVar = false;
}
<some-directive test="@myRazorVar.ToString().ToLower()"></some-directive>
@* or *@
<some-directive test="@Json.Encode(myRazorVar)"></some-directive>
<some-directive test="@Json.Encode(myVar)"></some-directive>