2016-02-04 57 views
0

我有一個應用程序允許用戶在模態角材料設計對話框中創建和編輯記錄($ mdDialog) 我的問題是將對話框返回的對象放入在主控制器中的一個collecion。有沒有辦法做到這一點?把材料設計對話框中的一個對象放入主控制器

angular.module("module").controller("mainController", function ($scope, $mdDialog) { 
    $scope.Users = []; 

    function OpenEditWindow(userToEdit) { 
     $mdDialog.show({ 
      templateUrl: 'Views/user.html', 
      controller: 'UserDialogController', 
      clickOutsideToClose: true, 
      locals: { // Envia valores para o controller do dialog 
       User: userToEdit 
      } 
     }).then(function (data) { 
      // Put the object edited into the collection on main controller, to show on the screen 
      $scope.Users.push(data); // ******** NOT WORKS 
     }); 
    } 
}); 

angular.module('module') 
.controller('UserDialogController', function ($scope, $mdDialog, User) { 
    $scope.User = User; 

    $scope.Save = function() { 
     $mdDialog.hide($scope.User); 
    } 
}); 

回答

0

所示也許你可以集中你的數據,並創建整個應用程序仍然存在用戶的狀態的服務模式。這樣的服務可以像其他每個依賴項一樣傳遞到您的控制器中。

angular.module('module') 
.controller('UserDialogController', function ($scope, $mdDialog, User, UserModel) { 
    $scope.User = User; 

    $scope.Save = function() { 
     $mdDialog.hide($scope.User); 
    } 
}); 


angular.module('module').factory('UserModel', function() { 

    var userModel = this; 

    userModel.set = function(){ 
    ... 
    } 

    return userModel; 
}); 

由於服務是保證您能夠獲得每一次最新和最偉大的信息單身。

嘗試使用風格指南,這將大大提高您的代碼,邏輯和整體質量。這樣的指南可能是John Papa's Angular Style Guide

0

$mdDialog.show返回的是承諾。你正在把你的then放在錯誤的地方。這是在角材文檔here

angular.module("module").controller("mainController", function ($scope, $mdDialog) { 
    $scope.Users = []; 

    function OpenEditWindow(userToEdit) { 
     var promise = $mdDialog.show({ 
      templateUrl: 'Views/user.html', 
      controller: 'UserDialogController', 
      clickOutsideToClose: true, 
      locals: { // Envia valores para o controller do dialog 
       User: userToEdit 
      } 
     }); 

     promise.then(function (data) { 
      // Put the object edited into the collection on main controller, to show on the screen 
      $scope.Users.push(data); // ******** NOT WORKS 
     }); 
    } 
});