Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将Razor布尔变量传递给Angular指令?_Javascript_C#_Angularjs_Razor_Boolean - Fatal编程技术网

Javascript 如何将Razor布尔变量传递给Angular指令?

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

我的cshtml文件中有一个布尔变量。当我试图将它传递给我的Angular指令时,它被接收为“False”,而不是“False”。如果我将其硬编码为“false”(小写),它也不起作用

我的cshtml文件:

@{
    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>