在angular-ui模态中解决混淆

时间:2014-07-29 08:26:21

标签: angularjs angular-ui angular-ui-bootstrap

我有一个非常奇怪的问题,因为我无法在这里复制实际的生产代码,或者至少不是很多,你可能无法帮助我,但我还是会尝试

以下是我正在做的事情的简化示例: http://plnkr.co/edit/7IjX4jV9sb2Fb6NpmzUZ?p=preview

angular.module("hello", [
  "ui.bootstrap",
  "ui.bootstrap.tpls",
  ]);

angular.module("hello").controller("helloCtrl", function($scope, $modal){
  $scope.openModal = function(){
        var modalInstance = $modal.open({
            templateUrl: 'modal.tpl.html',
            controller: 'modalCtrl',
            resolve: {
                obj1: function(){
                  return {name:"obj1"};

                },
                obj2: function(){
                  return {name:"obj2"};
                }
            }
        });
  };
});

angular.module("hello").controller("modalCtrl", function($scope, obj1, obj2){
  $scope.obj1 = obj1;
  $scope.obj2 = obj2;
})

所以我打开一个模态并解析要在模态控制器中使用的对象。这个例子有效,但在实际代码中 obj1将被解析为obj2,而obj2将是未定义的。当它们来到控制器时它们也已经错了,而不仅仅是在连接之后他们的范围。

在实际项目中,我也使用ui-router,但模式不是它自己的状态,在这种状态或父状态下,这些名称都没有解决。

如果有人对可能导致此类行为的事情有任何想法或猜测,我真的很感激听到他们。

修改

以下是生产代码中最相关的部分:

模态开启控制器:

angular.module('cmt').controller('createClusterModalCtrl', function ($scope, $modal, clusterSvc) {
    $scope.openCreateClusterModal = function () {
        var modalInstance = $modal.open({
            templateUrl: '..path to template..',
            controller: 'clusterCreateCtrl',
            windowClass: 'cmt-xl-modal-window',
            resolve: {
                initTab: 0,
                validationSettings: function(){
                    //return something simple for debug
                    return {name:"validation"};
                },
                cluster: function(){
                    //return something simple for debug
                    return {name: "cluster"};
                } 
            }
        });
    };
});

模态控制器:

angular.module('cmt').controller('clusterCreateCtrl', function ($scope, $modalInstance, clusterSvc, toastr, initTab, validationSettings, cluster) {
    console.log("validation:");
    console.log(validationSettings);   //will print name: "cluster"
    console.log("cluster:");
    console.log(cluster);              //will print undefined

    ......

1 个答案:

答案 0 :(得分:1)

发现错误:

解决" initTab:0"导致它获得下一个定义的功能,所以堡垒。我不得不将其更改为返回0的函数。

有人会解释为什么你不能解决除功能之外的其他问题吗?