1

我有 2 条路线:

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");
}]);

他们都工作正常!

我想要的是能够从“/list/:class”路由呈现模式窗口中的其中一个路由的“editortemplate”。

在我的“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
    });

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

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

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

3 回答 3

1

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

$scope.showEditorPanel = function (size, a, b) {
  var modalInstance = $modal.open({
  animation: true,
  templateUrl: 'editortemplate',
  controller: 'editorController',
  size: size,
  backdrop: true,
  resolve: {
           scope: function () {
                            $scope.properties.class = a;
                            $scope.properties.id = b;
                            return $scope.properties;
                        }
           }
});
于 2015-09-25T14:28:09.990 回答
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 属性!)。显式代码就是好代码!

于 2015-09-25T14:34:31.600 回答
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
    });
于 2015-09-25T14:29:01.093 回答