2017-09-07 62 views
2

我想通过我的承诺传递一些简单的布尔值和字符串值。下面是该方法在视图中renedering的一个模式:在承诺控制器之间传递数据Angularjs

$scope.openHjelpModal = function (field) { 

    var modalInstance = $uibModal.open({ 
     animation: true, 
     templateUrl: 'app/produkt/ny/views/hjelpModal.html', 
     controller: 'hjelpModalController', 
    }); 


    modalInstance.result.then(function (field) { 
     var kategori = ''; 
     var pakning = false; 
     var epd = false; 
     var lansering = false; 

     switch (field) { 
      case 'p': 
       console.log('pakningsoppbyggning rendering'); 
       pakning = true; 
       epd = false; 
       lansering = false; 
       kategori = 'pakningsoppbyggning'; 
       break; 
      case 'e': 
       console.log('epd-kategori rendering'); 
       pakning = false; 
       epd = true; 
       lansering = false; 
       kategori = 'EPD-kategori'; 
       break; 
      case 'l': 
       console.log('lansering rendereing'); 
       pakning = false; 
       epd = false; 
       lansering = true; 
       kategori = 'lansering'; 
       break; 
     } 
    }, function() { 
     //logService.info('Modal dismissed at: ' + new Date()); 
    }); 

}; 

我需要在布尔和字符串传递给模态莫名其妙。我知道推荐的方法将是一项服务,但我迄今尚未能够遵循此处提供的任何解决方案。

这里是我将使用变量的模态(HTML文件):

<h4>Hjelp for: {{kategori}} </h4> 

<div ng-if="lansering"> 
    <p> kommer fra lansering</p> 
</div> 

<div ng-if="epd"> 
    <p> kommer fra epd</p> 
</div> 

<div ng-if="pakning"> 
    <p> kommer fra pakning</p> 
</div> 




<div class="modal-footer"> 
    <button class="btn btn-green pull-left" type="button" ng-click="lukk();">Lukk</button> 
</div> 

运行控制台日志从hjelpModalController返回undefined,这是一个在答案中提供的变化:

 $scope.openHjelpModal = function (field) { 

       var modalInstance = $uibModal.open({ 
        animation: true, 
        templateUrl: 'app/produkt/ny/views/hjelpModal.html', 
        controller: 'hjelpModalController', 
        resolve: function() { 
          return field; 
        } 
       }); 
       console.log(field); // works here 

    } 

而且从hjelpModalController:

angular.module('app').controller('hjelpModalController', hjelpModalController); 
hjelpModalController.$inject = ['$scope','$uibModalInstance']; 

function hjelpModalController($scope, $uibModalInstance, field) { 
    console.log(field); // returns undefined 

} 

更新:

这里是我所做的最新进展:

控制器传递变量:

$scope.openHjelpModal = function (field) { 
      var modalInstance = $uibModal.open({ 
       animation: true, 
       templateUrl: 'app/produkt/ny/views/hjelpModal.html', 
       controller: 'hjelpModalController', 
       resolve: { 
        selectedHelpModal: function() { 
         console.log(field); // correct output 
         return field; 
        } 
       } 
      }); 



      modalInstance.result.then(function() { 
       console.log('or here'); 
       console.log(field); // correct output 
      }); 
} 

控制器recieving变量:

angular.module('app').controller('hjelpModalController', hjelpModalController); 

    hjelpModalController.$inject = ['$scope','$uibModalInstance']; 

    function hjelpModalController($scope, $uibModalInstance, field) { 
     console.log('hjelp modal controler is running'); 
     console.log(field); // undefined 
} 

回答

1

其实uibModal提供resolve PARAM用于此目的。

var modalInstance = $uibModal.open({ 
    animation: true, 
    templateUrl: 'app/produkt/ny/views/hjelpModal.html', 
    controller: 'hjelpModalController', 
    resolve: { 
     field: function() { 
      return field; 
     } 
    } 
}); 

然后它被DI您的模态控制器内访问(对DI名称遵循决心键名)

.controller('hjelpModalController', function(field) { 
    console.log(field); 
}) 
+0

运行您的解决方案将返回以下控制台输出:未捕获SyntaxError:在严格模式代码中,函数只能在顶层或块内声明。 – Steingrrim

+0

@Steingrrim对不起,解决应该是一个对象而不是功能 – Icycool

+0

有了一些小的变化,你的答案解决了我的问题。谢谢你,先生。 – Steingrrim

0

只有在上面提供的代码的微小变化。

var modalInstance = $uibModal.open({ 
    templateUrl: 'app/produkt/ny/views/hjelpModal.html', 
    controller: 'hjelpModalController', 
    animation: true, 
    resolve: { 
     field: function() { 
      return field; 
     } 
    } 
}); 

而在模态控制器:

.controller('hjelpModalController', function(field) { 
    console.log(field); 
}) 

如果你想关闭该模式(最有可能你会)添加$uibModalInstance作为PARAM成模态控制器。

controller('hjelpModalController', function(field,$uibModalInstance) { 
    console.log(field); 
    $scope.cancel = function() { 
    $uibModalInstance.dismiss('cancel'); 
}; 



}) 
相关问题