Javascript 我们可以加载动态角度对话框吗?
我注意到Angular的对话框可以通过加载html文件(或html格式的任何文件)来实现自定义对话框,如下所示: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
$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似乎也无法纠正此问题。