Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.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
Angularjs 未定义的角推_Angularjs_Angularjs Scope - Fatal编程技术网

Angularjs 未定义的角推

Angularjs 未定义的角推,angularjs,angularjs-scope,Angularjs,Angularjs Scope,无法调用未定义的方法“push” 当我的AngularJS运行以下命令时,我收到该错误: $scope.ok = function () { $modalInstance.close(); $scope.key.push({ title: '', gps:'', desc:''}); }; 我声明了我的$scope.key=[]就在我的.controller之后,因为我需要能够在应用程序的其他部分中使用$scope.key。有人能指出我应该在哪里申报吗 $scope.ok是我的

无法调用未定义的方法“push”

当我的AngularJS运行以下命令时,我收到该错误:

$scope.ok = function () {
    $modalInstance.close();
    $scope.key.push({ title: '', gps:'', desc:''});
};
我声明了我的
$scope.key=[]
就在我的
.controller
之后,因为我需要能够在应用程序的其他部分中使用
$scope.key
。有人能指出我应该在哪里申报吗

$scope.ok
是我的保存按钮,它从我的输入字段中提取数据,
$scope.plotmarkers
是我用来从已按下的输入中提取数据的按钮

app.controller('MenuSideController', ['$scope','$modal','$log', function($scope, $modal, $log) {

    $scope.key = [];

    $scope.createmarker = function () {
        var modalInstance = $modal.open({
            templateUrl: 'template/modal-add-marker.html',
            controller: ModalInstanceCtrl,
            resolve: {}
        });
        modalInstance.result.then(function (selectedItem) {
        }, function () {
            $log.info('Modal dismissed at: ' + new Date());
        });
    };
    var ModalInstanceCtrl = function ($scope, $modalInstance) {
        $scope.ok = function () {
            $modalInstance.close();
            $scope.key.push({ title: '', gps:'', desc:''});
        };

        $scope.cancel = function () {
            $modalInstance.dismiss('cancel');
        };
    };


    $scope.plotmarkers = function() {
        console.log($scope.key);
    };
}]);

不要忘记将作用域传递给
$modal。打开
!如果不这样做,它将默认为根作用域,而根作用域不是控制器作用域的子作用域,因此未在其上或其父作用域上定义
key
。您可以使用
{scope:$scope.$new(),…}
作为
$model.open
的参数来传递控制器作用域的子级。有关详细信息,请参阅。祝你好运

我认为您使用$modal有点不当

这里有两个控制器——一个用于应用程序逻辑,另一个用于模式窗口本身。根据最佳实践,您不应该在不同的控制器之间直接交互(父-子指令的情况是排除,但老实说,它不是直接交互-而是您的链接器函数使用了来自父指令的控制器)。通常,我们应该使用服务,而不是控制器之间的交互。这只是附加说明

与您的问题相关的是什么?您需要记住两件事:

  • 如果要将信息从控制器传递到模态窗口,则应使用resolve属性,该属性实际上指定了多个函数,这些函数被调用以获取数据,然后作为函数参数注入模态窗口控制器。这样,您可以从主控制器传递一些数据
  • 如果您需要传回结果,您应该使用模态实例的result属性,这是承诺(通过使用$modalInstance.result.then(function(result){…};)来从模态传递此对象,您可以将其作为参数关闭:$modalInstance.close(result)
希望这有帮助。有关更多详细信息,请参阅$model:

$scope(from function参数)的文档,它将$scope从外部函数隐藏起来