如何将服务器端属性连接到 angular 控制器
How do you connect server side properties into angular controller
我正在使用 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;
});
}
]);
身份验证对象如何进入此处的范围?在哪里创建?
例如,如果我想添加一个对象,比如来自我的 MongoDb 的 foobar,将此数据从服务器大小导入 angular 控制器的标准做法是什么?
大卫
我没有使用过这个特定的生成器(我使用 angular-fullstack-gennerator)。但很可能是相似的。
您的似乎需要使用 CRUD sub generator。这将使您能够创建、读取、更新和删除。所以不管你怎么称呼它,你都会将它导入到你需要它的控制器中。
如果您将其命名为 CRUDserverstuff,则可以像下面的行一样导入它:
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);
}
我也是 angular 的新手,所以我不确定是否需要或什至应该像在导入行上那样放置两次。这让我有点困惑。
如果您不习惯使用 MEAN 堆栈生成器,我发现 fullstack 对初学者非常友好。要仔细学习的一件事是文件结构。全面披露:我是 angular 和 MEAN 堆栈的新手。这也是我在这里的第一个回答所以你去吧。
身份验证是服务文件夹中定义的一项服务,它位于您所在的控制器文件夹旁边。这是服务定义:
angular.module('users').factory('Authentication', [
function() {
var _this = this;
_this._data = {
user: window.user
};
return _this._data;
}
]);
您在这里看到的是在控制器中引用服务的标准方式。在 angular 中,您通常拥有具有业务层逻辑的服务,包括通过 restful 协议与后端对话的逻辑。
要引用它,您只需在控制器定义中提供服务的名称,然后使用依赖项注入进行该服务引用。有一个在后台运行的注入器通过该名称查找服务,并创建对它的引用。
所以您创建的任何其他服务,就像创建此身份验证服务一样,然后以类似的方式将服务名称放入控制器定义中以使用该服务。
现在引用 MongoDb 数据库的东西在这里没有意义,因为这是堆栈的前端部分。此代码在客户端浏览器而不是服务器上执行。
MongoDb 数据库位于服务器上,您在此堆栈的应用程序文件夹中看到的所有代码都是服务器端代码。 public文件夹中的所有代码都是前端代码。希望这有帮助。
我正在使用 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;
});
}
]);
身份验证对象如何进入此处的范围?在哪里创建?
例如,如果我想添加一个对象,比如来自我的 MongoDb 的 foobar,将此数据从服务器大小导入 angular 控制器的标准做法是什么?
大卫
我没有使用过这个特定的生成器(我使用 angular-fullstack-gennerator)。但很可能是相似的。
您的似乎需要使用 CRUD sub generator。这将使您能够创建、读取、更新和删除。所以不管你怎么称呼它,你都会将它导入到你需要它的控制器中。
如果您将其命名为 CRUDserverstuff,则可以像下面的行一样导入它:
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);
}
我也是 angular 的新手,所以我不确定是否需要或什至应该像在导入行上那样放置两次。这让我有点困惑。
如果您不习惯使用 MEAN 堆栈生成器,我发现 fullstack 对初学者非常友好。要仔细学习的一件事是文件结构。全面披露:我是 angular 和 MEAN 堆栈的新手。这也是我在这里的第一个回答所以你去吧。
身份验证是服务文件夹中定义的一项服务,它位于您所在的控制器文件夹旁边。这是服务定义:
angular.module('users').factory('Authentication', [
function() {
var _this = this;
_this._data = {
user: window.user
};
return _this._data;
}
]);
您在这里看到的是在控制器中引用服务的标准方式。在 angular 中,您通常拥有具有业务层逻辑的服务,包括通过 restful 协议与后端对话的逻辑。
要引用它,您只需在控制器定义中提供服务的名称,然后使用依赖项注入进行该服务引用。有一个在后台运行的注入器通过该名称查找服务,并创建对它的引用。
所以您创建的任何其他服务,就像创建此身份验证服务一样,然后以类似的方式将服务名称放入控制器定义中以使用该服务。
现在引用 MongoDb 数据库的东西在这里没有意义,因为这是堆栈的前端部分。此代码在客户端浏览器而不是服务器上执行。
MongoDb 数据库位于服务器上,您在此堆栈的应用程序文件夹中看到的所有代码都是服务器端代码。 public文件夹中的所有代码都是前端代码。希望这有帮助。