Angularjs取决于父范围
在使用AngularJs构建应用程序时,我问自己以下是好的做法吗 我有“AppController”,其他所有控制器都是它的子控制器。AppController有类似的功能Angularjs取决于父范围,angularjs,Angularjs,在使用AngularJs构建应用程序时,我问自己以下是好的做法吗 我有“AppController”,其他所有控制器都是它的子控制器。AppController有类似的功能 $scope.layout = { sidebar: false, searchbar: true}; 现在,子控制器应该能够更改这些值: $rootScope.sidebar = true; 在这种情况下,我的子模块完全依赖于根控制器,如果我希望此子控制器在其他应用程序中工作,我必须确保其他应用程序的父控制器始终具有
$scope.layout = { sidebar: false, searchbar: true};
现在,子控制器应该能够更改这些值:
$rootScope.sidebar = true;
在这种情况下,我的子模块完全依赖于根控制器,如果我希望此子控制器在其他应用程序中工作,我必须确保其他应用程序的父控制器始终具有$scope.layout对象。这是好的做法吗?构建父控制器和子控制器都使用的布局模块是否更好?就像下面的代码:
angular.module("app.ui", [])
.factory("Layout", [function(){
var _sidebar = false;
var searchbar = true;
var sidebar = function(flag){
if(flag !== undefined) _sidebar = flag;
return _sidebar;
}
var searchbar = function(flag){
if(flag !== undefined) _searchbar = flag;
return _searchbar;
}
return {
sidebar : sidebar,
searchbar : searchbar
}
}])
虽然可能有其他体系结构方法来实现您的目标(例如,查看有关指令声明的作用域属性的文档及其使用@、=和&来绑定父作用域中特定属性的工具),但通常来说,服务确实是共享对公共数据访问的一个好选择。如果没有更新值时必须发生的额外逻辑,则可以将其简化一点:
angular.module("app.ui", [])
.service("Layout", function() {
this.sidebar = false;
this.searchbar = true;
})
如果将此服务注入控制器并将其添加到其作用域中,则可以对其进行更新并侦听以下更改:
.controller("AppCtl", function($scope, Layout) {
$scope.Layout = Layout;
// Method called by a search button, say
$scope.search = function() {
Layout.searchbar = true;
}
$scope.$watch("Layout.searchbar", function(newVal, oldVal) {
// Do something in this scope if value has been changed from elsewhere
});
});
虽然可能有其他体系结构方法来实现您的目标(例如,查看有关指令声明的作用域属性的文档及其使用@、=和&来绑定父作用域中特定属性的工具),但通常来说,服务确实是共享对公共数据访问的一个好选择。如果没有更新值时必须发生的额外逻辑,则可以将其简化一点:
angular.module("app.ui", [])
.service("Layout", function() {
this.sidebar = false;
this.searchbar = true;
})
如果将此服务注入控制器并将其添加到其作用域中,则可以对其进行更新并侦听以下更改:
.controller("AppCtl", function($scope, Layout) {
$scope.Layout = Layout;
// Method called by a search button, say
$scope.search = function() {
Layout.searchbar = true;
}
$scope.$watch("Layout.searchbar", function(newVal, oldVal) {
// Do something in this scope if value has been changed from elsewhere
});
});
您可以尝试这种方法,创建一个指令,在单击时触发滚动。
您可以尝试这种方法,创建一个指令,在单击时触发滚动。
如果您想构建模块化和自适应的应用程序,我建议您尝试directive controller。它们有自己的作用域,您可以在几乎所有上下文中重用它们。我认为第二种选择更好,使用服务来构建全局变量。请执行您认为最容易维护的操作。OP中建议的每个实现都很好。如果您想构建非常模块化和自适应的应用程序,我建议您尝试directive controller。它们有自己的作用域,您可以在几乎所有上下文中重用它们。我认为第二种选择更好,使用服务来构建全局变量。请执行您认为最容易维护的操作。OP中提出的每个实现都很好。我使用了Tim解决方案。不确定是否应该将其标记为答案,因为有很多解决方案,我只是使用了这个?我使用了Tim解决方案。不确定是否应该将其标记为答案,因为有很多解决方案,我只是使用了这个?