Res.render,可以创建一个控制器吗?

时间:2016-09-12 17:45:59

标签: javascript angularjs node.js express mean-stack

我正在使用这种平均堆栈结构:https://github.com/meanjs/mean

目前我正在使用res.render,如下所示:

res.render('modules/core/server/views/index', {
  user: safeUserObject,
});

可以将它分配给angularjs控制器吗?

我不知道如何用我目前的结构来做。

更新

我设法让控制器工作,但我无法从中获取数据? 我还需要将headcontroller作为根范围。

代码:

  function HeaderController($scope, $state, Authentication, menuService) {
var vm = this;

vm.accountMenu = menuService.getMenu('account').items[0];
vm.authentication = Authentication;

vm.datatest = 200000;
$scope.datatest = 200001;
console.log("loaded , maybe possible4?");

}

执行console.log,但我找不到任何值。

客户:

<div ng-controller="HeaderController">

<font style="color:white;">{{ vm.datatest }} {{ datatest }} {{ datatest }}</font>

</div>

一些调试:

enter image description here

1 个答案:

答案 0 :(得分:0)

如果要将此分配给vm,则应使用controllerAs语法。

<div ng-controller="HeaderController as vm">
    <span>{{vm.data}}</span>
</div>

要在父控制器和子控制器之间共享数据,请使用服务/工厂或将数据分配给$ rootScope。使用$ rootScope的示例:

//parent controller
function HeaderController ($rootScope) {
    var vm  = this;
    $rootScope.data = 'This is a string';
    //inject $rootScope into child controllers to get or set $rootScope.data
}

//child controller
function ChildController ($rootScope) {
    var vm = this;
    vm.data = $rootScope.data;
}

在大多数情况下,首选方法是使用服务或工厂:

//parent controller
function HeaderController (factory) {
    var vm = this;
    vm.data = 'This is a string';
    factory.set(vm.data);
    //set data in factory from parent controller 
}

//child controller
function ChildController (factory) {
    var vm = this;
    vm.data = factory.get();
    //get data from factory set in child controller
}

//basic example factory
function factory () {
    var data;
    var factory = {
        get: get,
        set: set
    }
    return factory;

    function get () { return data; }
    function set (item) { data = item; }
}

在配置块中渲染主模板和部分使用$ routeProvider:

app.config(function ($routeProvider) {
    $routeProvider
    .when('/', {templateUrl: 'main' })
    .when('/:template, {
        templateUrl: function (urlattr) {
            return urlattr.template;
        }
    });
});

在express中定义路线:

router.get('/', function (req, res ,next) {
    res.render('main')
})

router.get('/:template', function (req, res, next) {
    res.render(req.params.template)
})

这将在向根发出请求时呈现主模板。例如,当使用$ location.path('index')更改角度的路径时,会向express中的'/:template'路径发出请求,它将在您的views文件夹中查找名为'index的模板并呈现为部分,同时保留'main'模板。

希望这是有道理的。

相关问题