angularjs - 当主 Controller 发生变化时,mddialog textarea 模型不会更新

标签 angularjs dialog angular-material customdialog mddialog

这是一个关于 Angular Materials、mdDialogs 和范围变量的问题:

  • 我使用 Stomp 订阅了特定主题。
  • Stomp 从服务器接收字符串,并将它们连接在范围变量中。
  • 用户单击按钮以显示 mdDialog。
  • mdDialog 应在文本区域中显示传入的字符串更改。

但是...它无法正常工作。我必须关闭并重新打开对话框才能看到更改。我尝试在主视图(index.html)中添加文本区域,并且文本区域工作正常。

当我们在 Angular Materials 的 mdDialog 中时,为什么它不改变文本区域?有办法解决吗?

这是一个插件,您可以看到主视图(index.html)正确更新随机值,但如果您打开对话框,该值将无法正确更新...

https://plnkr.co/edit/teC69Sg7UqNbouHxpT22

var angularInstance = angular.module('ExampleApp', ['ngMaterial', 'ngMessages']) ;

angularInstance.controller('ExampleCtrl', function ExampleCtrl($scope, $mdDialog, $mdMedia, $interval)
{
    $scope.randomString = "" ;

    $scope.initialization = function()
    {
      $interval($scope.addRandomChar, 1000) ; 
    }

    $scope.addRandomChar = function()
    {
      $scope.randomString = $scope.randomString + "a" ;
    }

  $scope.openMyDialog = function(ev)
    {
        var useFullScreen = ($mdMedia('sm') || $mdMedia('xs'))  && $scope.customFullscreen ;
        $mdDialog.show({
            controller: myDialogController,
            templateUrl: 'myDialog.tmpl.html',
            parent: angular.element(document.body),
            targetEvent: ev,
            clickOutsideToClose:true,
            fullscreen: useFullScreen,
            resolve: 
            {
                randomString: function ()
                {
                    return $scope.randomString ;
                }
            }
        }) ;
    }
});

function myDialogController($scope, $mdDialog, randomString) 
{
    $scope.randomString = randomString ;

    $scope.close = function ()
    {
        $mdDialog.cancel() ;
    };
}

非常感谢。

最佳答案

Here you have a working plunker

总结一下,我使用locals稍微改变了将参数从ExampleCtrl传递到myDialogController的方式。

$mdDialog.show({
    controller: myDialogController,
    templateUrl: 'myDialog.tmpl.html',
    targetEvent: ev,
    locals: {parent: $scope},
    clickOutsideToClose:true,
    ...

然后,在您的对话框 Controller 中,您可以访问所有父范围:

function myDialogController($scope, $mdDialog, parent) {
    $scope.parent = parent;

    ...
}

最后,在 View 中,您只需将 parent.randomString 绑定(bind)到文本区域 ng-model,它就会按照您的预期工作:

<textarea ... ng-model="parent.randomString"/>

干杯。希望对您有所帮助。

关于angularjs - 当主 Controller 发生变化时,mddialog textarea 模型不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972265/

相关文章:

angularjs - Protractor selenium localStorage.clear() 不适用于 Internet Explorer

dialog - MonoTouch.Dialog 的 OwnerDrawnElement 突出显示不起作用

javascript - 在 Angular Material 中为 mdDialog Controller 设置数组类型语法

javascript - 如何将数据传递到 Angular Material 中的 $mdDialog

javascript - 使用 formArray 时出现 Mat-AutoComplete 错误

javascript - 使用 EmailJS 的安全问题?

javascript - AngularJS错误: Cannot read property 'get' of undefined

javascript - 保持 ng-init 变量与分配的 $index 同步

java - 在Java中可以将多个对话框压缩为一个吗

android - 如何更改 Android 5.0 的 DatePicker 对话框颜色