对于我的项目,我使用的是Ruby on Rails
和Angular
,haml
文件夹中有/project_name/app/assets/javascript
个文件。我想从haml
文件中调用ruby类,但不幸的是我无法做到这一点。
.small-12.columns
.booking-time
%span.bold
- if ABC::D.data(:hide_hours_field) #ruby code
{{ item | timeformat }}
- else
{{ item | differentTimeFormat }}
每当我启动服务器时,它都显示它无法访问ruby类。我可以轻松访问其他haml
文件中的ruby类,但不能访问javascript文件夹中的ruby类。有人能帮我一下吗?
答案 0 :(得分:1)
免责声明:我对Angular不好(甚至没有触及版本2)。以下内容不是最佳做法或其他任何内容。
因此,您需要使用ruby方面的一些知识来配置角度视图。你不能有条件地渲染它,你不能从角度控制器调用ruby(显然)。我建议通过window
对象走私数据。
在您的应用程序的适当视图中,放置此JS片段。
<script type='text/javascript'>
window.jsEnv = {
hide_hours_field: <%= ABC::D.data[:hide_hours_field] %>
}
</script>
然后你可以通过角度
中的$window
对象来引用它
控制器
function MyController($window) {
this.hideHours = function() {
return !!$window.jsEnv.hide_hours_field;
}
}
MyController.$inject = ['$window'];
angular.module('myApp').controller('MyController', MyController);
查看
.small-12.columns(ng-controller='MyController as vm')
.booking-time
%span.bold(ng-if='vm.hideHours()')
{{ item | timeformat }}
%span.bold(ng-unless='vm.hideHours()')
{{ item | differentTimeFormat }}
答案 1 :(得分:0)
我建议您使用角度常量而不是窗口,然后您可以将其用作服务:
// index.html
<script type="text/javascript">
angular.module('myApp').constant('CURRENT_USER', #{current_user.to_json})
</script>
// controller
function ApiConsoleController($scope, CURRENT_USER) {
console.debug(CURRENT_USER)
}
此外,您可以尝试使用angular-rails-templates
// application.rb
config.angular_templates.ignore_prefix = %w(
angular/components/
angular/shared/
angular/directives/
angular/validators/
)