Javascript 我们可以加载动态角度对话框吗?

Javascript 我们可以加载动态角度对话框吗?,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我注意到Angular的对话框可以通过加载html文件(或html格式的任何文件)来实现自定义对话框,如下所示: $mdDialog.show({ controller: DialogController, templateUrl: tempUrl, }); 我的问题是,我们是否可以不加载tempUrl,而是将tempUrl作为一个模板,在其中动态加载内容 我尝试在我的tempUrl中添加ng控件,如下所示: $mdDialog.show({ controller: Dial

我注意到Angular的对话框可以通过加载html文件(或html格式的任何文件)来实现自定义对话框,如下所示:

$mdDialog.show({
   controller: DialogController,
   templateUrl: tempUrl,
});
我的问题是,我们是否可以不加载
tempUrl
,而是将tempUrl作为一个模板,在其中动态加载内容

我尝试在我的
tempUrl
中添加
ng控件
,如下所示:

$mdDialog.show({
   controller: DialogController,
   templateUrl: tempUrl,
});

然后使用
{{scope.property}}
操作内容,但操作失败。正确的方法是什么

另外,我认为这可能与我生成的动态内容是异步完成的这一事实有关

这是我的密码:

  $scope.showCardDes = function(card) {
    var tempUrl = card.link;
    tempUrl = tempUrl.replace('sometext','othertext');
    tempUrl = tempUrl + '.json?api_key=xxx';
    $log.debug(tempUrl);
    $.ajax({
      url: tempUrl,
      crossDomain: true,
      dataType: "json",
      success: function(data) {
        $log.debug(data);
        $scope.description = data.results[0].description;
      },
      error: function(status) {
        $log.debug(status);
      }
    });
    $mdDialog.show({
      controller: DialogController,
      templateUrl: 'detail.html',
    });
  };
  $scope.test = 'test';
对于希望使用
$http
查看代码的用户:

$http({
  url: tempUrl,
  method: 'GET',
}).success(function(data) {
    $log.debug(data);
    detail = data;
    $scope.description = data.results[0].description;
  }).
  error(function(status) {
    $log.debug(status);
  });
$mdDialog.show({
  controller: DialogController,
  templateUrl: 'detail.html',
});
$scope.test = 'test';
下面是我在html对话框中设置的内容:

<md-dialog aria-label="Hi there.">
  <md-content style="padding:4%" ng-controller="dynamicContent">
    <p>
      {{description}}
    </p>
    <p>
      {{test}}
    </p>
  </md-content>
  <div class="md-actions" layout="row">
    <md-button ng-click="hide()">Go Back</md-button>
  </div>
</md-dialog>


{{description}}

{{test}}

回去
显然,“测试”通过“描述”显示得很好,因为后者涉及aync过程。顺便说一句,如果我
console.log(scope.description)
它实际上会显示正确的内容-我假设对话框是在加载描述之前加载的…也许它甚至在加载页面时加载的


我试着在
$http
上使用
.then()
,但仍然不起作用。

这是一个既棘手又简单的问题。这并不是因为您正在异步运行
$http
$.ajax
,而是因为对话框的范围没有更新

在这里:


您应该指定您使用的第三方模块为您提供
$mdDialog
服务。没有一个标准的角度对话框服务。另外,尝试使用Angular
$http
服务,而不是Angular Material的分叉。我的代码实际上是通过
$http
完成的。我刚刚翻译成
$.ajax
,因为更多的人熟悉
$.ajax
。不要这样翻译,这只会让你得到无效的反馈。你应该发布尽可能与真实代码相似的代码。您可以假设任何知道Angular的人都知道
$http
。将$scope传递给对话框的问题是,当对话框关闭时,$scope被销毁。将preserveScope设置为true似乎也无法纠正此问题。