如何从angularjs访问变量表达式

时间:2016-10-04 10:33:30

标签: javascript angularjs node.js express pug

第一

exports.render = function(req,res){
    res.render('index', {
        title: 'welcome',
        username : req.user ? req.user :''
    });

};

我想导出对象 req.user以使用

h2 Hello #{username.username}
h2 Hello #{username}

在Jade中我可以使用它

div(ng-app='IndexController')
             {{ #{username} | getUserData }}

但如果我想让它变成棱角分明,则无法使用

mainAppModule.filter('getUserData', function () {
    return function (name) {
        if (name)
            console.log(name.username + "xxxxxxxxxxxxxxxxxxxxxxxxqqqqqqqqqq");
        return 'Hellox, ';
    };
});

我该怎么办?如何在将来使用req.user。如果还有其他方法可以让对象在角度使用,请告诉我。 非常感谢。

2 个答案:

答案 0 :(得分:1)



function MyCtrl($scope) {
  $scope.req = {'user':'scope user'};  
    
   this.req1 = {'user':'alias user'} ;
}

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="">
  <div ng-controller="MyCtrl as myCont">
      {{req.user}}
      <br/>
      {{myCont.req1.user}}
  </div>
</div>
&#13;
&#13;
&#13;

我不确定你面临的问题。您只需使用$ scope或controller别名来访问视图中的任何变量。

按别名

<div ng-controller="MainController as main">
    {{main.name.userName}}
</div>

按$ scope

<div ng-controller="MainController">
    {{name.userName}}   
</div>

答案 1 :(得分:0)

似乎您需要将请求对象传递给角度代码。 我可以建议尝试制作一个模块,作为玉器渲染对象的模型,如下所示:

<强> index.jade

div(ng-controller="myController as ctrl")
    h2 Title: {{ ctrl.title | myFilter }}
    h2 Username: {{ ctrl.username | myFilter }}

script.
    angular.module('jadeData',[])
      .factory('jadeDataFactory',function(){

        //model service to set objects retireved from jade
        return {
          'title': "#{title}",
          'username': "#{username}"
        };
      });
script(src="/js/app.module.js")

完成后,您可以访问主模块控制器中的服务模型

<强> app.module.js

  angular.module("myApp",['jadeData'])
    .controller("myController",function(jadeDataFactory){
      var that = this;

      that.title = jadeDataFactory.title;
      that.username = jadeDataFactory.username;

    })
    .filter("myFilter",function(){
      return function(v){
        if(v)
          console.log('Inside filter value: ',v);
        return v+' Modified';
      }
    });

这样您就可以将jadeDataFactory注入任何所需的控制器/服务

解释:实际上Jade是在服务器端呈现的,如果你写{{ #{username} | getUserData }},那么渲染器无法正确获取它,更好的方法是将它存储在服务模型中并访问它在所需的控制器中。