在Rails应用的Haml视图中使用AngularJS

21

我的Rails应用中有一些使用Haml的视图。现在我想要在应用的某些部分中添加AngularJS,但问题是Haml视图是在服务器端渲染的,而AngularJS代码是在客户端渲染的,所以目前无法正常工作。

假设我的index.html.haml文件只有以下内容:

!!!
%html{"ng-app" => "Test"}
  %head
    %script{:src => "http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.js"}
    :javascript
      function Clock($scope) {
        $scope.currentTime = new Date();
      }
    %title Welcome to AngularJS
  %body
    %h1 Hello, World.
    %p{"ng-controller" => "Clock"}
      The current time is {{currentTime | date:'h:mm:ss a'}}.

当前情况下,它只是打印出花括号内的所有内容而没有实际处理它。有一些解决方案,但它们适用于完全由AngularJS模板替换的视图的情况。我想在我的Rails应用程序中主要使用AngularJS来实现小的功能。有什么解决办法吗?

1个回答

23

John,

我在这里稍微编辑了你的代码:http://codepen.io/anon/pen/vKiwH

%html{"ng-app"=>true}
 %p{"ng-controller" => "clock"}
  The current time is {{currentTime | date:'h:mm:ss a'}}.

并且 JavaScript 代码是:

function clock($scope) {
  $scope.currentTime = new Date().getTime();
}

谢谢,那个有效。我在HTML标签中给我的Angular应用程序命名时犯了一个错误,但没有创建命名空间。 - John
8
在haml中进行一项非常微小的改进是编写%html{"ng-app" => true}或%html(ng-app=true),这两者都将使得生成的HTML变成<html ng-app>,而不是含有空字符串的形式。 - Jeremy S.
1
使用haml 4.0.5(在Rails 4下),我发现我可以简单地写成%html(ng-app) - Alistair A. Israel
旁注:在HAML中编写Angular指令的另一种方法->%p {ng:{controller:“clock”,repeat:“loop in loops”}}等... - Adam Cooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接