【问题标题】:ng-init with razor expression带有剃刀表达式的 ng-init
【发布时间】:2013-12-13 09:57:44
【问题描述】:

我正在尝试渲染这样的东西:

<thead ng-init="isDoctor = @(User.IsInRole("Doctor"))">

我希望它是“isDoctor = true|false”(我的服务器端代码呈现此模板返回 PartialView),顺便说一句,我总是收到如下错误:语法错误:令牌'未定义'不是主要表达式表达式 [isDoctor =] 的列 null 从 [isDoctor = at Error ()] 开始。那么,这是什么原因呢?

【问题讨论】:

    标签: javascript angularjs razor


    【解决方案1】:

    试试这个方法:

    <thead ng-init="isDoctor = @(User.IsInRole("Doctor") ? "true" : "false")">
    

    因为 C# 布尔值以大写首字母呈现:

    <thead ng-init="isDoctor = True|False">
    

    TrueFalse 未定义

    【讨论】:

    • 很好,它有效。该死的,大写的白痴错误。谢谢!
    【解决方案2】:

    或者,您可以考虑以下几点:

    <script type='text/javascript'>
    
        angular.module('my-module')
            .value('isDoctor', @(User.IsInRole("Doctor") ? "true" : "false"))
            // perhaps other values that need passed in from the server?
            .constant('aValue', '@Model.AValue') // for example
            ;
    
    </script>
    

    这不会像ng-init 那样将值直接放到作用域上;但是,它为您提供了一个可注入的值,您可以在控制器、服务、指令等中使用它。实际上,它是一个运行时配置变量:

    // some script somewhere
    angular.module('my-module').controller('myController', [
        '$scope',
        'isDoctor',
        function($scope, isDoctor) {
            $scope.isDoctor = isDoctor;
    
            // other controller code here
        }]);
    

    这种将数据从 Razor 传递到 Angular 的方式的好处在于,如果您忘记这样做,Angular 的依赖注入将引发错误,因为实例化 myController 需要定义 isDoctor。它将难以发现的潜在运行时错误转移到应该相对容易纠正的配置/编译错误中。

    它还为您在 Razor (cshtml) 文件中提供了一个单独的位置,您的服务器端参数将被传递到 Angular 运行时,这样就不那么混乱了,尤其是当您的 HTML 标记有很多指令和插值时。

    【讨论】:

    • 是的,常量或值也是一个选项,除非 ng-init 没有问题,而是取自 razor 表达式的“未定义”值。谢谢。
    • 我不建议遵循建议的方式,因为您只能在 .cshtml 中使用 Razor 语法,而不是 .js。因此,您必须将代码放在我认为不好的视图中。
    猜你喜欢
    • 1970-01-01
    • 2011-06-09
    • 1970-01-01
    • 2020-12-02
    • 1970-01-01
    • 2016-01-24
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多