Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS从模态控制器访问父控制器属性-解析vs$scope_Javascript_Angularjs_Angular Ui Bootstrap - Fatal编程技术网

Javascript AngularJS从模态控制器访问父控制器属性-解析vs$scope

Javascript AngularJS从模态控制器访问父控制器属性-解析vs$scope,javascript,angularjs,angular-ui-bootstrap,Javascript,Angularjs,Angular Ui Bootstrap,学习AngularJS对我来说是一项正在进行的工作,所以我只想了解为什么/什么时候我们应该在下面的特定情况下使用一个而不是另一个。这只是口味的问题还是更多?见下面的例子 在这两种情况下,当用户单击OK按钮时,将从子控制器调用父控制器的create函数 解决方式 CreateController CreateModalController 范围样式 CreateController CreateModalController 更新 我问这个问题的实际原因是,在我使用的一些语言/框架中,在另一个控制

学习AngularJS对我来说是一项正在进行的工作,所以我只想了解为什么/什么时候我们应该在下面的特定情况下使用一个而不是另一个。这只是口味的问题还是更多?见下面的例子

在这两种情况下,当用户单击OK按钮时,将从子控制器调用父控制器的create函数

解决方式

CreateController

CreateModalController

范围样式

CreateController

CreateModalController

更新

我问这个问题的实际原因是,在我使用的一些语言/框架中,在另一个控制器/服务中访问/注入一个服务/控制器的类似父/根/容器的对象被认为是一种不好的做法。

解析的思想是,它将在初始化其余代码之前首先运行。通常,您会在路由中使用resolve,如下所示:

在上面的示例中,resolve将在控制器初始化之前启动load函数。另一方面,作用域用于直接绑定到控制器或指令中的某些内容。触发函数并绑定到控制器和指令之间的值时,应使用作用域


要根据下面的注释对此进行补充,如果解析失败,它将拒绝模式,窗口将不会打开。

OP询问中的resolve属性。这是正确的答案,但是值得一提的是,如果解析失败,承诺拒绝转换将被取消,模式将不会显示。这种模式在角度上很常见。我把它添加到了我的答案中@我知道他说的是引导模式。我只是提供了一个示例,说明了resolve在Angularjs中是如何工作的,以及什么时候使用它与OP所问的作用域。这个答案解释了resolve在route config中的作用,但没有回答这个问题。。。为什么/何时我们应该使用一个而不是另一个[使用UI引导模式]…答案仍然给出了解释。在执行特定操作(如打开窗口或初始化控制器或指令)之前,应使用resolve来运行代码。这仍然与所提出的问题有关。这只是以路由为例,$parent的使用是一个更深层次问题的征兆。“resolve”属性更通用、更健壮,因为它对于模态的每个实例都可能不同。它也可以通过一个承诺来解决。@georgeawg我添加了更新部分来解释我为什么提出这个问题。你踩对了!我只是不喜欢$scope.$parent。。。因为某种原因,我被咬了一口。我只是需要等待,看看别人怎么说。
...

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
        }
    });
}

...
...

vm.ok = function() {
    create();
    $uibModalInstance.close('ok');
};

...
...

var vm = this;

vm.create = create;

function create() {
    console.log('Created!');
}

vm.openCreateModal = function() {
    vm.modalInstance = $uibModal.open({
        ...
        scope: $scope,
        resolve: {
        }
    });
}

...
...

vm.ok = function() {
    $scope.$parent.vm.create();
    $uibModalInstance.close('ok');
};

...
$routeProvider
        .when('/', {
            templateUrl: "views/view.html",
            caseInsensitiveMatch: true,
            resolve: {
                load: function() {
                    localStorage['Location'] = "/View";
                }
            }
        })