Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.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 如何从另一个控制器中的指令访问作用域_Javascript_Angularjs - Fatal编程技术网

Javascript 如何从另一个控制器中的指令访问作用域

Javascript 如何从另一个控制器中的指令访问作用域,javascript,angularjs,Javascript,Angularjs,我需要一些帮助来了解如何在我的firstCtr控制器中访问$scope.imageUpload.image\u文件 我有以下标记: HTML: 但是,当我尝试在firstCtr中获取scope$scope.imageUpload.image_文件时,它是未定义的 .controller("firstCtr", ['$scope', '$rootScope', "$location", etc..... $scope.actionClick = function () {

我需要一些帮助来了解如何在我的firstCtr控制器中访问
$scope.imageUpload.image\u文件

我有以下标记:

HTML:

但是,当我尝试在firstCtr中获取scope$scope.imageUpload.image_文件时,它是未定义的

 .controller("firstCtr", ['$scope', '$rootScope', "$location", etc.....

           $scope.actionClick = function () {
                 console.log($scope.imageUpload)
            }

我可以使用rootscope来实现这一点,但这似乎不是一个好主意。有没有更好的方法来备份此作用域?

有几种方法

一种方法是在imageUpload指令中,在父作用域中注入一个属性,这样父作用域的控制器就可以访问它并执行它必须执行的操作。因此,在imageUpload指令控制器函数中:

$scope.$parent.imageUpload = {};
$scope.$parent.image_File = $files[0];
为了获得更健壮的解决方案,我可能会在imageUpload指令中使用
require
关键字,这样它就可以可靠地访问firstCtr controller并在其中设置属性

.directive('imageUpload', function () {
    // Directive used to display a badge.
    return {
        restrict: 'A',
        require: 'firstCtr'
        replace: true,
        templateUrl: "/static/html/partials/directives/imageToolsUpload.html",
        controller: function ($scope, element, attrs, firstCtr) {
           $scope.onImageSelect = function ($files) {
               console.log( $scope.project);
               firstCtr.imageUpload = {};
               firstCtr.imageUpload.image_file =  $files[0];
        };
        }
    }
});

那么如何传入控制器呢?它可以是任何控制器吗?通过在指令中指定require:'firstCtr',angularjs将查找匹配的指令,并在该指令的控制器(如果有)参数中返回给您。请参阅此处的AngularJS文档,了解一个指令如何要求另一个指令并在同一HTMLElement或父HTMLElement上的指令之间访问其控制器:。该页面包含很多内容,但这是所有AngularJS文档中最重要的页面。这是一本必读的书。
$scope.$parent.imageUpload = {};
$scope.$parent.image_File = $files[0];
.directive('imageUpload', function () {
    // Directive used to display a badge.
    return {
        restrict: 'A',
        require: 'firstCtr'
        replace: true,
        templateUrl: "/static/html/partials/directives/imageToolsUpload.html",
        controller: function ($scope, element, attrs, firstCtr) {
           $scope.onImageSelect = function ($files) {
               console.log( $scope.project);
               firstCtr.imageUpload = {};
               firstCtr.imageUpload.image_file =  $files[0];
        };
        }
    }
});