angularJS resolve:在控制器中“无法读取未定义

时间:2015-04-28 23:26:26

标签: javascript angularjs twitter-bootstrap bootstrap-modal ui.bootstrap

这是我关于stackoverflow的第一个问题。 (我知道我用引号挣扎了很多..)我遇到了这个问题,下面的代码片段给我留下了以下错误:

  

TypeError:无法读取未定义的属性“目标”      at $ scope.addValue。$ modal.open.resolve.goals(app.js:59)      at Object.invoke(angular.js:3762)      在ui-bootstrap-tpls-0.12.1.js:2118      at Object.forEach(angular.js:329)      at getResolvePromises(ui-bootstrap-tpls-0.12.1.js:2116)      at Object。$ modalProvider。$ get。$ modal.open(ui-bootstrap-tpls-0.12.1.js:2151)      在Scope。$ scope.addValue(app.js:53)      在Parser.functionCall(angular.js:10294)      在angular.js:18229      在Scope。$ get.Scope。$ eval(angular.js:12075)

我的代码中的“目标”相当于“灵感来自”代码中的“项目”。

此消息似乎来自ctrlAddValue控制器,其中包含'目标'参考:function($ scope,$ modalInstance,goals)

感谢您的帮助!

罪魁祸首:

app.controller("ctrlCtx", function ($scope, $state, $stateParams, $modal,     $window) {

$scope.goals = "A good goal";

     $scope.addValue = function (size, $scope) {
        var modalInstance = $modal.open({
            templateUrl: 'templates/addValue.html',
            size: "lg",
            controller: "ctrlAddValue",
            resolve: {
                goals: function () {
                    return $scope.goals;
                }
            }
        })
        modalInstance.result.then(
             function (selectedItem) {

              }, 
              function () {

              });
     }; });

这是'ctrlAddValue'控制器代码。

app.controller('ctrlAddValue', function ($scope, $state, $modalInstance, goals) {

$scope.addValue = function(){

    $modalInstance.close();
};

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

 });

这是基于模态的ui.bootstrap演示。

2 个答案:

答案 0 :(得分:1)

app.controller("ctrlCtx", function ($scope, $state, $stateParams, $modal,     $window) {

$scope.goals = "A good goal";

     $scope.addValue = function (size, $scope) {

您将$ scope作为本地参数传递,并且可能像$ scope.addValue(something)一样调用此函数;使本地$ scope未定义。

从addValue函数中删除$ scope参数。

答案 1 :(得分:0)

将你的ctrlCtx设置为如下所示:

 app.controller("ctrlCtx", function ($scope, $state, $stateParams, $modal,     $window) {

        $scope.goals = "A good goal";

             $scope.addValue = function () {
                var modalInstance = $modal.open({
                    templateUrl: 'templates/addValue.html',
                    size: "lg",
                    controller: "ctrlAddValue",
                    resolve: {
                        goals: function () {
                            return $scope.goals;
                        }
                    }
                })

             }; 
        });

此目标应在ctrlAddValue

中提供