Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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/5/ruby/23.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父指令作用域方法_Javascript_Angularjs_Angularjs Directive_Controller - Fatal编程技术网

Javascript 如何从子指令调用AngularJS父指令作用域方法

Javascript 如何从子指令调用AngularJS父指令作用域方法,javascript,angularjs,angularjs-directive,controller,Javascript,Angularjs,Angularjs Directive,Controller,我有一个带有确认和取消方法的父模式指令 ngDialog.open({ scope : true, showClose : false, template : theTemplate, className : 'ngdialog-theme-prompt -small', controller : ['$scope', function Ct

我有一个带有确认和取消方法的父模式指令

        ngDialog.open({
            scope      : true,
            showClose  : false,
            template   : theTemplate,
            className  : 'ngdialog-theme-prompt -small',

            controller : ['$scope', function Ctrl($scope) {
                $scope.message = message;

                $scope.confirm = function(){
                    $scope.closeThisDialog();
                    resolve(true);
                };

                $scope.cancel = function(){
                    $scope.closeThisDialog();
                    resolve(false);
                };
            }]

        }).closePromise.then(function () {
            resolve(false);
        })
模板是另一个指令

<form class="edit-stakes-content">
    <ul>
        <li ng-repeat="stake in settings track by $index">
            <input type="number" name="input" pattern="^\d+$" min="0" value="{{stake}}" />
        </li>
    </ul>
    <div class="edit-stakes-control">
        <button ng-click="cancel();" class="apl-btn apl-btn-link apl-btn-large" translate>CANCEL</button>
        <button ng-click="confirm();" autofocus="true" class="apl-btn apl-btn-update apl-btn-large" translate>SAVE</button>
    </div>
</form>
调用父方法会抛出一个JavaScript错误,$scope.$parent.cancel似乎还不是一个函数


有没有更好的方法可以在不出现JavaScript错误的情况下实现子级到父级的通信?

$scope.$parent
通常可以被视为反模式,几乎没有什么好的用途,通常它表明指令设计有问题,或者没有很好地理解作用域继承

指令
指令不请求新的作用域,因此可以安全地假设它与模态控制器中的作用域相同。这意味着,
$scope.$parent
指的是模式作用域(可能是根作用域)的父级,它没有
cancel
属性

这也意味着
$scope.settings
分配会影响控制器作用域,但显然不应该。最好在该指令中使用
scope:true
继承作用域

无论是否存在
范围:true
,但指令中将提供
$scope.cancel
。它继承自模态范围。没有理由这么做

$scope.cancel = $scope.$parent.cancel();
$scope.cancel = $scope.$parent.cancel();