javascript - AngularJS: $on doesn't work -
i trying make possible edit user name in modal window using angularjs, however, after use "update()" function second controller, name remains same. $scope.closethisdialog(); works fine. what's wrong $on , $emit?
my service:
'use strict'; var myservice = function () { var user = { name: "peter", surname: "pitt"}; var service = {}; service.user = user; return service; }; module.exports = [myservice]; first controller:
'use strict'; var firstcontroller = function ($scope, myservice, ngdialog) { $scope.user = myservice.user; $scope.openmodal = function () { ngdialog.open({templateurl: 'mytemplate'}); }; $scope.$on("updateuser", function(event, data){ $scope.user = data; }); }; module.exports = ['$scope', 'myservice', 'ngdialog', firstcontroller]; second controller:
'use strict'; var secondcontroller = function ($scope, myservice, ngdialog) { $scope.editeduser = angular.copy(myservice.user); $scope.update = function () { $scope.$emit("updateuser", $scope.editeduser); $scope.closethisdialog(); }; }; module.exports = ['$scope', 'myservice', 'ngdialog', secondcontroller]; index file:
<html> <body ng-app=""> <div ng-controller="firstcontroller"> <a ng-click="openmodal()">edit</a> name: {{user.name}} </br> surname: {{user.surname}} </div> </body> </html> and modal window:
<script type="text/ng-template" id="edit"> <form ng-controller="secondcontroller"> <input ng-model="editeduser.name"> <input ng-model="editeduser.surname"> <button ng-click="update()">submit</button> </form> </script>
looks need pass $scope ngdialog.open emitting on same scope listening on:
ngdialog.open({ template: 'mytemplate', scope: $scope }); of course, since sharing same scope, should able edit $scope.user directly in modal , not bother emitting/listening events @ ;)
Comments
Post a Comment