【问题标题】:AngularJS - Getting data inserted in domAngularJS - 获取插入 dom 的数据
【发布时间】:2013-08-07 08:05:36
【问题描述】:

我正在寻找一种在加载应用程序后从 DOM 获取初始数据的方法。数据已被服务器插入到视图中。 Modulevalue方法是不是好方法?

我还想知道在使用routes 时如何从视图中获取数据,我可以使用script 标签在特定范围内注入数据吗?

我看到了thisthis 的问题,但没有多大帮助。

【问题讨论】:

标签: javascript xml angularjs client-server client-side


【解决方案1】:

1) 受this question 启发的第一个解决方案是Module's value method

<script>
   var users_json = '[{"name":"Piotr"},{"name":"Natasha"}]'; // created by xsl
   myApp.value("PrimaryData" , users_json );
</script>
<ul>
   <li ng-repeat="user in users">{{user.name}}</li>
</ul>

然后我们可以在我们希望的时间和地点使用这个PrimaryData,就像这样:

myApp.controller('MainCtrl', function($scope, PrimaryData) {
    $scope.data = angular.copy(PrimaryData); 
    console.log( $scope.data[0].name === "John" );
});

但是当我开始使用 routes 时,这种方式对我不起作用,可能是因为 value 仅在应用程序初始化时运行。

2) 所以第二个解决方案来了:指令。现在,当服务器发送一个路由的模板时,它会在一些 script 标签内放入一个 "text/template" 类型和特殊指令名称属性以及该标签中的 json 数据,如下所示:

<script  type = "text/template" rawdata >     <!-- "rawdata" is our directive
   '[{"name":"Nelson"},{"name":"Luis"}]'      // created by xsl
</script>
<ul>
   <li ng-repeat="user in users">{{user.name}}</li>    // view is beside
</ul>

这个指令捕获它并将数据传递到当前路由的范围:

studio.directive('rawdata', function() {
  return {
    link: function(scope, element, attr, ctrl) { 
        if(scope.passRawData){
            var data = (element[0].innerHTML);
            scope.passRawData(data); // Or simply scope.users = JSON.parse(data)
        } else {
            console.log( "Scope has no passRawData method" );
        }
    }
  }
});

太棒了! :)

【讨论】:

  • 我刚刚使用了指令解决方案,非常感谢。但我不得不删除脚本标签中 JSON 周围的单引号。是什么让你把它们放在那里?
猜你喜欢
  • 2021-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
相关资源
最近更新 更多