Javascript 如何在主页面上显示在对话框模式中所做的更改

Javascript 如何在主页面上显示在对话框模式中所做的更改,javascript,angularjs,ng-dialog,Javascript,Angularjs,Ng Dialog,我对AngularJs和都是新手,我很难让绑定在ngDialog模式和控制器之间工作。我通过指定{scope:$scope}将控制器的作用域注入到模式中,并且我可以访问控制器中定义的方法,但是与控制器中定义的模型的绑定无法正常工作 我试图使用一个模式来允许用户向组织添加地址 这里是main.js var App = angular.module('App', ['ngRoute', 'ngCookies', 'ngDialog']); ... App.controller('PageOrga

我对AngularJs和都是新手,我很难让绑定在ngDialog模式和控制器之间工作。我通过指定
{scope:$scope}
将控制器的作用域注入到模式中,并且我可以访问控制器中定义的方法,但是与控制器中定义的模型的绑定无法正常工作

我试图使用一个模式来允许用户向组织添加地址

这里是main.js

var App = angular.module('App', ['ngRoute', 'ngCookies', 'ngDialog']);

...

App.controller('PageOrganization', function($scope, $rootScope, ngDialog, $route, $location){
    $scope.addAddressFormData = {};

    $scope.addAddress = function(){
        ngDialog.open({
            template: 'partials/modals/add-address.html',
            controller: 'PageOrganization',
            scope: $scope
        });
    };

    $scope.saveAddress = function(){
        console.log($scope.addAddressFormData);
        $scope.organization.addresses.push($scope.addAddressFormData);
        console.log($scope.organization);
    };

    // STUBBED OUT ORGANIZATION
    $scope.organization = {
        org_type: "nonprofit",
        name: 'New Organization',
        addresses: [],
        phoneNumber: "",
        faxNumber: "",
        emailAddress: "",
        website: "",
        primaryContact: "",
        primaryEmail: "",
        imageUrl: "",
        isPrivate: false,
        campaigns: [],
        admins: []
    };
下面是organization.html:

...

<button ng-click="addAddress()">Add an Address</button>
<h1>Addresses</h1>
<ul>
    <li ng-repeat="address in organization.addresses">
        <p>
            {{address.type}} <br>
            {{address.addressLine1}} <br>
            {{address.addressLine2}} <br>
            {{address.city}} <br>
            {{address.state}} <br>
            {{address.postalCode}}
        </p>
    </li>
  </ul>
并将organization.html中的“添加地址”按钮更改为匹配:

<button class="button color-c vertical-a float-right" ng-click="pushAddress()">Add an Address</button>
添加地址
现在,当我单击“添加地址”时,新地址立即显示在
ng repeat
中,每个控制台日志包含所有地址,而不仅仅是最近的地址


这两种方法有什么区别?当使用控制器作用域中的方法进行模式“过期”更改时,为什么要进行更改?

不要将
控制器
参数传递给
ngDialog。打开
。当您这样做时,将为该对话框实例创建一个新控制器,这就是为什么您会看到它“工作”。它访问的是另一个控制器实例的作用域和变量,而不是您传入的
$scope
中的那个

因此,只需将“打开”对话框代码更改为以下代码即可:

$scope.addAddress = function(){
    ngDialog.open({
        template: 'partials/modals/add-address.html',
        scope: $scope
    });
};

这是我创建的一个应用程序。

完美!非常感谢你的回答。只是为了子孙后代,你忘了从答案中删除
控制器:“PageOrganization”
。@BrentKlein感谢你指出这一点,在复制/粘贴了你的问题后,我完全错过了它。如果不使用$scope,你将如何执行此操作,但是相反,controllerAs'vm'语法?@AlxVallejo这是一个不同的问题,您应该澄清是否要在封闭的控制器上或在
ngDialog
api中使用controllerAs语法。我看了一下,它不像像这个问题那样使用$scope那么简单,您必须创建另一个控制器。
<button class="button color-c vertical-a float-right" ng-click="pushAddress()">Add an Address</button>
$scope.addAddress = function(){
    ngDialog.open({
        template: 'partials/modals/add-address.html',
        scope: $scope
    });
};