代码之家  ›  专栏  ›  技术社区  ›  Dave3of5

如何将服务器端属性连接到角度控制器

  •  1
  • Dave3of5  · 技术社区  · 9 年前

    我正在使用yeoman meanjs生成器,我有点困惑。在我的核心Angular控制器中,我有这样的设置:

    angular.module('core').controller('HeaderController', ['$scope', 'Authentication', 'Menus',
        function($scope, Authentication, Menus) {
            $scope.authentication = Authentication;
            $scope.isCollapsed = false;
            $scope.menu = Menus.getMenu('topbar');
    
            $scope.toggleCollapsibleMenu = function() {
                $scope.isCollapsed = !$scope.isCollapsed;
            };
    
            // Collapsing the menu after navigation
            $scope.$on('$stateChangeSuccess', function() {
                $scope.isCollapsed = false;
            });
        }
    ]);
    

    身份验证对象如何进入此处的作用域?在哪里创建?

    例如,如果我想添加一个对象,比如foobar,它来自我的MongoDb,那么从服务器大小将这些数据输入角度控制器的标准做法是什么?

    大卫

    2 回复  |  直到 9 年前
        1
  •  1
  •   dreamerkumar    9 年前

    身份验证是在位于您所在的控制器文件夹旁边的服务文件夹中定义的服务。以下是服务定义:

    angular.module('users').factory('Authentication', [
    function() {
        var _this = this;
    
        _this._data = {
            user: window.user
        };
    
        return _this._data;
    }
    ]);
    

    您在这里看到的是控制器中引用服务的标准方式。在angular中,您通常拥有具有业务层逻辑的服务,包括通过restful协议与后端通信的逻辑。

    要引用它,只需在控制器定义中提供服务的名称,然后使用依赖注入进行服务引用。有一个注入器在场景后面运行,以查找该名称的服务,并创建对它的引用。

    因此,您创建的任何其他服务,都要像这个身份验证服务一样创建,然后以类似的方式将服务的名称放在控制器定义中以使用该服务。

    现在引用MongoDb数据库的东西在这里没有意义,因为这是堆栈的前端部分。此代码在客户端浏览器而不是服务器上执行。

    MongoDb数据库位于服务器上,您在该堆栈中的应用程序文件夹中看到的所有代码都是服务器端代码。公用文件夹中的所有代码都是前端代码。希望这有帮助。

        2
  •  1
  •   sitrucj    9 年前

    我没有使用过这个特定的生成器(我使用 angular-fullstack-gennerator ). 但情况很可能类似。

    你的似乎需要使用 CRUD sub generator 。这将使您能够装箱、读取、更新和删除。所以无论你怎么称呼它,你都会把它导入到你需要的控制器中。

    如果你叫它 CRUD服务器材料 ,然后可以像下面的行那样导入它:

    angular.module('core').controller('HeaderController', ['$scope', 'Authentication', CRUDserverstuff, 'Menus',
    function($scope, Authentication, CRUDserverstuff, Menus) { 
    //use it as you would any other objecte here
    CRUDserverstuff.post(myData);
    }
    

    我对角度也很陌生,所以有一件事我不确定,那就是它是否需要或者甚至应该像这样放在进口线上两次。这让我有点困惑。

    如果您不习惯使用MEAN堆栈生成器,我发现完整堆栈生成器对初学者非常友好。要小心学习的一件事是文件结构。完整披露:我是角度和平均堆栈的新手。这也是我在这里的第一个回答,所以就这样吧。