Javascript 使用角度过Swig更有效地解释路线视图中的数据?

Javascript 使用角度过Swig更有效地解释路线视图中的数据?,javascript,json,angularjs,node.js,swig-template,Javascript,Json,Angularjs,Node.js,Swig Template,我有一个JSON对象数组,这些对象从我的节点路由传递到它各自的视图中。例如: res.render(“path/to/view”,{data:result,data2:result2}) 其中result和result2都是JSON对象的数组。在我看来,我是在ng init函数中使用它们的,比如:({{}}指定swig,其中我已将[[]]更改为指定角度,因此在下面的示例中,我们在使用定义的角度init函数之前使用swig) 我应该说上面的例子很好,但是当“数据”成为一个非常大的数据集时,swi

我有一个JSON对象数组,这些对象从我的节点路由传递到它各自的视图中。例如:

res.render(“path/to/view”,{data:result,data2:result2})

其中result和result2都是JSON对象的数组。在我看来,我是在ng init函数中使用它们的,比如:({{}}指定swig,其中我已将[[]]更改为指定角度,因此在下面的示例中,我们在使用定义的角度init函数之前使用swig)

我应该说上面的例子很好,但是当“数据”成为一个非常大的数据集时,swig部分花费了太多的时间——也就是将其转换为JSON(再次…?)。正如我所说,“数据”已经是JSON的形式,但是当我从上面的swig部分删除| JSON时,我得到了一个
[$parse:syntax]
错误,它给了我上面的一行,但计算如下:

我已经尝试过使用
ng init=“init([[JSON.parse({{data}})])”
的各种变体,这样我就可以对JSON的输出进行评估(即使输出已经是..?),但无法实现任何功能


有什么想法吗?也许我的语法错了?我不明白,因为当我将“数据”传递到视图时,它是JSON,但我无法将它直接传递到我的init函数中,而不会出现语法错误。

将使用
ng init
调用的任何内容从视图中取出,并将其放入控制器或服务中

有很多理由不使用
ng init
,以至于Angular团队基本上建议您不要使用它:

更新

我终于明白你想做什么了,这叫做引导。您可以将数据嵌入视图服务器端,如下所示:

<script>
  angular.module("app").constant("myBootstrap", {{ data.stringified }});
</script>

angular.module(“app”).constant(“myBootstrap”,{{data.stringified});

其中
data.stringified
是您的字符串化数据。然后,在Angular中,您可以使用
myBootstrap
将数据作为常量注入任何控制器,就像对
$rootScope
等注入一样,数据将可用。

将使用
ng init
调用的任何内容从视图中移除,并将其放入控制器或服务中

有很多理由不使用
ng init
,以至于Angular团队基本上建议您不要使用它:

更新

我终于明白你想做什么了,这叫做引导。您可以将数据嵌入视图服务器端,如下所示:

<script>
  angular.module("app").constant("myBootstrap", {{ data.stringified }});
</script>

angular.module(“app”).constant(“myBootstrap”,{{data.stringified});

其中
data.stringified
是您的字符串化数据。然后,在Angular中,您可以使用
myBootstrap
将数据作为常量注入任何控制器,就像您在
$rootScope
等中所做的一样,并且数据将可用。

因此,虽然我不完全确定是什么原因导致其速度如此缓慢,但我已经找到了一个解决方案,尽管“hack”可能更准确地描述它。我遇到的问题是,Swig在将数据传递到init函数之前花了很长时间对数据进行模板化(我现在知道这是一种糟糕的做法;也就是说,使用nginit调用函数)

我应该向未来的读者指出,我使用Node.js、Swig进行模板制作,使用Angular处理MVC方面的事情

请参阅上面的问题,了解我的代码以前是什么样子的(慢速版本)。以下是我的解决方案:

路由侧

HTML


如您所见,我所做的唯一更改是在将JSON转换为HTML之前对其进行字符串化,然后在它到达控制器后对其进行解析

我之所以认为这是可行的,是因为我基本上是在模板引擎(Swig)以外的部分中完成所有JSON处理。我尝试不使用过滤器,但Swig默认将数据转换为JSON,这破坏了我的HTML。我之所以称之为黑客而不是解决方案,是因为我们对数据进行了字符串化,然后对Swig使用json过滤器,根据文档:

返回JavaScript对象的字符串表示形式


如果我不得不猜测的话,我会说,通过对字符串使用json过滤器,Swig决定它与此无关,因为对象已经是一个字符串,只需传递它(这正是我一直想要的!)。令人难以置信的是,当Swig不接触数据时,速度会快得多。JSON stringify和parse对于数据的大小来说非常快,而Swig需要40秒,所以虽然我不完全确定是什么原因导致它速度如此之慢,但我找到了一个解决方案,尽管“hack”可能更准确地描述它。我遇到的问题是,Swig在将数据传递到init函数之前花了很长时间对数据进行模板化(我现在知道这是一种糟糕的做法;也就是说,使用nginit调用函数)

我应该向未来的读者指出,我使用Node.js、Swig进行模板制作,使用Angular处理MVC方面的事情

请参阅上面的问题,了解我的代码以前是什么样子的(慢速版本)。以下是我的解决方案:

路由侧

HTML


如您所见,我所做的唯一更改是在将JSON转换为HTML之前对其进行字符串化,然后在它到达控制器后对其进行解析

我之所以认为这是可行的,是因为我基本上是在模板引擎(Swig)以外的部分中完成所有JSON处理。我尝试不使用过滤器,但Swig默认将数据转换为JSON,这破坏了我的HTML。我之所以称之为黑客而不是解决方案,是因为我们对数据进行了字符串化,然后对Swig使用json过滤器,根据文档:

返回JavaScript对象的字符串表示形式

如果让我猜的话,我会说通过对字符串使用json过滤器,Swig决定
<div ng-init=" init( {{ data|json }} )">   </div>
$scope.init = function(data){
    $scope.dataInScope = JSON.parse(data);
}