模态

时间:2015-09-25 14:00:58

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

我有两条路线:

app.config(['$routeProvider', '$locationProvider', function(
  $routeProvider, $locationProvider) {
    $routeProvider.
    when("/list/:class", {
        controller: "listController",
        templateUrl: "DatabaseObject",
        reloadOnSearch: true
    }).
    when("/edit/:class/:id?", {
        templateUrl: "editortemplate"
    }).
    otherwise("/custombrowsingstartpage");
}]);

他们都工作正常!

我想要的是能够渲染" editortemplate"一个模态窗口中的一个路由来自" / list /:class"路由。

在我的" listController"我有模态打开功能:

    $scope.showEditorPanel = function (size, a, b) {
      //console.log($scope);
      var modalInstance = $modal.open({
      animation: true,
      //templateUrl: '#/edit/'+b+'/'+a,
      templateUrl: 'editortemplate',
      controller: 'editorController',
      size: size,
      backdrop: true,
      scope: $scope
    });

模板渲染得很好,但我不知道如何传递模板所需的类和id变量(如路线所示)。

我尝试用变量定义路由(class == var b,id == var a)而不是模板url但没有运气:

//templateUrl: '#/edit/'+b+'/'+a,

3 个答案:

答案 0 :(得分:1)

如果您添加'resolve'对象,您可以发送您想要的内容,我相信这是使用$ modal执行此操作的“Angular”方式:

body

答案 1 :(得分:1)

要将数据传递到模态窗口,您需要使用模态实例的resolve方法。它的工作方式与路由器中的相同属性相同:

$scope.showEditorPanel = function (size, a, b) {
  var modalInstance = $modal.open({
    ...
    resolve: {
      class_id: function () { return $scope.class_id }
    }
  });

然后你需要在模态窗口的控制器中要求:

function editorController ($modalInstance, $scope, class_id) {
  // use the class_id ...
  $scope.class_id = class_id;
}

这将“class_id”修复为模态控制器的显式要求,并有助于在路上进行故障排除。您可以通过$ scope“秘密地”传递它,但这不是一个好主意(我断然避免$ modal中的$ scope属性!)。显式代码是很好的代码!

答案 2 :(得分:0)

我只需将预期变量定义为$ routParams:

  $scope.showEditorPanel = function (size, a, b) {
    //console.log($scope);
    $routeParams.class=b;
    $routeParams.id=a;
    var modalInstance = $modal.open({
      animation: true,
      //templateUrl: '#/edit/TissueSample/'+a,
      templateUrl: 'editortemplate',
      controller: 'editorController',
      size: size,
      backdrop: true,
      scope: $scope
    });