2016-04-02 8 views
3

私はcshtmlファイルにブール変数を持っています。 Angularディレクティブに渡すと "false"ではなく "False"として受け取ります。私が「偽」(小文字)にハードコードすると、どちらも機能しません。Razorブール変数をAngularディレクティブに渡すにはどうすればよいですか?

マイ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) // false 
       console.log(!!$scope.test) // true 
      } 
     } 
    }); 

答えて

3

あなたは見つけることができ、あなたの範囲は、する必要がありますあなたの答えの一部here

特にAngularの場合、test: '@'の代わりにtest: '='というディレクティブ変数を使用します。これにより、変数はブール値の値が "false"で、のテキストは "false"ではなく解析されます。

また、あなたのカミソリファイルで、「偽」に「偽」から変換するには、次の試してください。両方の言語は大文字と小文字が区別され、(偶数の場合)ブールのための異なるパターンを使用しているので

@{ 
    var myRazorVar = false; 
} 

<some-directive test="@myRazorVar.ToString().ToLower()"></some-directive> 
@* or *@ 
<some-directive test="@Json.Encode(myRazorVar)"></some-directive> 
1

'=' ない '@'

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 
      } 
     } 
    }); 
3

を、あなたは次のものを使用できます。

<some-directive test="@Json.Encode(myVar)"></some-directive> 

C#データをjavascriptに適切にフォーマットします。

+1

しかし、あなたは '= 'バインディングも使う必要があると確信しています。 '@'を使うとブール値を文字列として扱います。 – Zanon

関連する問題