@符号破坏角度表达式

时间:2015-08-17 23:42:27

标签: javascript c# json angularjs json.net

由于@符号,以下html会中断。除了不使用@符号之外,还有什么可以解决的问题。我必须使用@符号,因为json将使用xml中的newtonsoft jsonconvert http://www.newtonsoft.com/json在c#web api中生成。 jsonconvert在生成的json中使用@符号前缀xml属性。

如何解决@符号问题?对我有用的一件事是message.root.node1 [“@ attr1”]。如果可能,请提供一个资源,详细说明角度变量/表达式中禁止使用的符号。

<html ng-app="countryApp">
  <head>
    <meta charset="utf-8">
    <title>Angular.js JSON Fetching Example</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
    <script>
      var countryApp = angular.module('countryApp', []);
      countryApp.controller('CountryCtrl', function ($scope, $http) {
            $scope.message = { "root": { "node1": { "@attr1": "1", "@attr2": "2" }, "node2": { "@attr1": "3", "@attr2": "4" } } }

      });
    </script>
  </head>
  <body ng-controller="CountryCtrl">
    <h2>Angular.js JSON Fetching Example</h2>

      <span>
        menudatetime {{message.root.node1.@attr1}}
      </span>


  </body>
</html>

4 个答案:

答案 0 :(得分:2)

使用22.+

它基本上是Angular的JavaScript表达式。 dependencies { // compile `com.android.support:appcompat-v7:23.+` compile `com.android.support:appcompat-v7:22.2.1` } 无效javascript ...

答案 1 :(得分:1)

您可以切换到括号表示法作为解决方法:

<html ng-app="countryApp">
  <head>
    <meta charset="utf-8">
    <title>Angular.js JSON Fetching Example</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
    <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.26/angular.min.js"></script>
    <script>
      var countryApp = angular.module('countryApp', []);
      countryApp.controller('CountryCtrl', function ($scope, $http) {
            $scope.message = { "root": { "node1": { "@attr1": "1", "@attr2": "2" }, "node2": { "@attr1": "3", "@attr2": "4" } } }

      });
    </script>
  </head>
  <body ng-controller="CountryCtrl">
    <h2>Angular.js JSON Fetching Example</h2>

      <span>
        menudatetime {{message.root.node1['@attr1']}}
      </span>


  </body>
</html>

答案 2 :(得分:1)

在这种情况下,您应该使用数组访问器(括号表示法):

 <span>
        menudatetime {{message.root.node1.["@attr1"]}}
 </span>

关于表达式可以执行的文档及其限制,请转到Angular文档中的https://docs.angularjs.org/guide/expression

答案 3 :(得分:0)

使用此

{{message.root.node1["@attr1"]}}

jsbin

来自MDN:

括号表示法

get = object[property_name];
object[property_name] = set;

property_name是一个字符串。该字符串不必是有效的标识符;它可以有任何价值,例如&#34; 1foo&#34;,&#34;!bar!&#34;,甚至&#34; &#34; (空格)。

document['createElement']('pre');

这与上一个示例完全相同。