学习AngularJS对我来说是一项正在进行的工作,所以我只想了解为什么/何时应该在下面的特定情况下使用一个。这只是味道还是更重要的问题?见下面的例子。
在这两种情况下,当用户单击确定按钮时,将从子控制器调用父控制器的create()
功能。
解决风格
CreateController
...
var vm = this;
vm.create = create;
function create() {
console.log('Created!');
}
vm.openCreateModal = function() {
vm.modalInstance = $uibModal.open({
...
resolve: {
create: function() {
return create;
},
// Others if any
}
});
}
...
CreateModalController
...
vm.ok = function() {
create();
$uibModalInstance.close('ok');
};
...
SCOPE STYLE
CreateController
...
var vm = this;
vm.create = create;
function create() {
console.log('Created!');
}
vm.openCreateModal = function() {
vm.modalInstance = $uibModal.open({
...
scope: $scope,
resolve: {
}
});
}
...
CreateModalController
...
vm.ok = function() {
$scope.$parent.vm.create();
$uibModalInstance.close('ok');
};
...
更新
我提出这个问题的实际原因是,将一个服务/控制器的对象的父/根/容器作为/向另一个控制器/服务进行访问/注入被认为是一种错误的做法"在我使用的一些语言/框架中。
答案 0 :(得分:1)
resolve
的想法是在初始化其余代码之前先运行它。通常,您会在resolve
中使用routing
,如此:
$routeProvider
.when('/', {
templateUrl: "views/view.html",
caseInsensitiveMatch: true,
resolve: {
load: function() {
localStorage['Location'] = "/View";
}
}
})
在上面的示例中,resolve
将在我的控制器初始化之前触发load function
。另一方面,scope
用于直接绑定到控制器或指令中的某些内容。在触发函数和绑定控制器和指令之间的值时,应使用scope
。
要根据以下评论添加此内容,如果resolve
失败,则会拒绝该模式,并且窗口将无法打开。