Javascript 如何在主页面上显示在对话框模式中所做的更改
我对AngularJs和都是新手,我很难让绑定在ngDialog模式和控制器之间工作。我通过指定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
{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
});
};