2016-03-31 9 views
10

मेरे पास एक HTML तालिका है जिसमें एक एनजी दोहराना निर्देश और दो बटन शामिल हैं। पहला एक ऐसा मॉडल खोल देगा जिसमें एक नया रूप होगा और मुझे अपना उपयोगकर्ता बनाने दें और फिर जब मैं सहेजें क्लिक करता हूं तो यह सूची में जोड़ देगा। दूसरा एक ही मूल रूप में है और उपयोगकर्ता को जोड़ें।यदि बटन एक अलग रूप से बुलाया गया तो Ng Repeat क्यों काम नहीं कर रहा है?

मुझे क्या समझ में नहीं आया कि जब मैं पहले बटन पर क्लिक करता हूं जो एक अलग रूप में होता है तो मैं एनजी दोहराना अद्यतन नहीं कर सकता, हालांकि दूसरे के लिए यह संभव है। इस कोड है: अपने मोडल टेम्पलेट उपयोग नहीं कर सकते क्योंकि

homepage.jsp

<body ng-app="myApp"> 
    <div class="generic-container" ng-controller="UserController as ctrl"> 
     <div id="createUserContent.jsp" ng-include="createUserContent"></div> 
     <table> 
      <tr> 
       <td> 
        <button type="button" class="btn btn-primary" 
        ng-click="ctrl.openCreateUser()">Create</button> 
       </td> 
      </tr> 
     </table> 
     <table class="table table-hover"> 
      <thead> 
       <tr> 
        <th>ID.</th> 
        <th>Name</th> 
        <th>Address</th> 
        <th>Email</th> 
        <th width="20%"></th> 
       </tr> 
      </thead> 
      <tbody> 
       <tr ng-repeat="u in ctrl.users"> 
        <td><span ng-bind="u.ssoId"></span></td> 
        <td><span ng-bind="u.firstName"></span></td> 
        <td><span ng-bind="u.lastName"></span></td> 
        <td><span ng-bind="u.email"></span></td> 
       </tr> 
      </tbody> 
     </table> 
    </div> 
</body> 

user_controller.js

'use strict'; 

App.controller('UserController', function ($scope, UserService, $window, $log, $uibModalStack, 
     $uibModal, $rootScope) { 
    var self = this; 

    self.users = []; 

    self.fetchAllUsers = function() { 
     console.log('----------Start Printing users----------'); 
     for (var i = 0; i < self.users.length; i++) { 
      console.log('FirstName ' + self.users[i].firstName); 
     } 
    }; 
     /** 
    this function will not work 
    **/ 
    self.saveUser = function (user) { 
     self.users.push(user); 
     self.fetchAllUsers(); 
     $log.log("saving user"); 
     $uibModalStack.dismissAll(); 
    }; 

    /** 
    this function works fine 
    **/ 
    self.addNewRow = function() { 
     var specialUser = { 
       id : 12, 
       firstName : 'john', 
       lastName: 'travolta', 
       homeAddress : {location:'chicago'}, 
       email : '[email protected]' 
     }; 
     self.users.push(specialUser); 
     $log.log("saving specialUser"); 
    }; 
    self.openCreateUser = function() { 

     var modalInstance = $uibModal.open({ 
       animation : true, 
       templateUrl : 'createUserContent', 
       controller : 'UserController', 
       resolve : { 
        items : function() { 
         return $scope.items; 
        } 
       } 
      }); 

     modalInstance.result.then(function (selectedItem) { 
      $scope.selected = selectedItem; 
     }, function() { 
      $log.info('Modal dismissed at: ' + new Date()); 
     }); 
    }; 
    self.fetchAllUsers(); 
}); 

createUserContent.jsp

<form role="form" ng-controller="UserController as ctrl" > 
    <div class="form-group"> 
     <label for="FirstName">FirstName</label> <input type="FirstName" 
      ng-model="ctrl.user.firstName" class="form-control" 
      id="FirstName" placeholder="Enter FirstName" /> <label 
      for="lastName">lastName</label> <input type="lastName" 
      class="form-control" id="lastName" 
      ng-model="ctrl.user.lastName" placeholder="Enter lastName" /> 
     <label for="email">Email address</label> <input type="email" 
      ng-model="ctrl.user.email" class="form-control" id="email" 
      placeholder="Enter email" /> 
    </div> 
    <div class="form-group"> 
     <label for="homeAddressLocation">Home Address</label> <input class="form-control" 
      ng-model="ctrl.user.homeAddress.location" id="homeAddressLocation" 
      placeholder="homeAddressLocation" /> 
    </div> 
    <div class="form-group"> 
     <label for="SSOId">SSOId</label> <input class="form-control" 
      ng-model="ctrl.user.ssoId" id="SSOId" placeholder="SSOId" /> 
    </div> 
    <button type="submit" class="btn btn-default" 
     ng-click="ctrl.saveUser(ctrl.user)">Save</button> 
    <button type="submit" class="btn btn-default">Cancel</button> 
</form> 

उत्तर

15

अपने UserController ऑब्जेक्ट और त्रुटि का उपयोग नहीं करता क्योंकि आप उपयोग करते हैं डी मोडल टेम्पलेट में कंट्रोल r इसलिए नए Ctrl के रूप में पुनः लोड किया गया है, जो Ctrl को संदर्भित नहीं करता है।

हालांकि बेहतर अलग नियंत्रक का उपयोग करें और नियंत्रक मोडल करने के लिए माता-पिता नियंत्रक पारित वस्तु को और फिर मोडल शरीर सभी पैरेंट ऑब्जेक्ट का उपयोग कर सकते हैं। इसलिए आपको मूल ऑब्जेक्ट को मोडल नियंत्रक पर पास करना चाहिए।

जब आप अपने मुख्य फ़ाइल तो कोई अपने मोडल टेम्पलेट में ng-controller="UserController as ctrl" उपयोग करने की आवश्यकता में createUserContent.jsp पॉपअप फ़ाइल शामिल आप modalInstance में इस्तेमाल controller : 'Ctrl',

की तरह:

var modalInstance = $uibModal.open({ 
     templateUrl: 'createUserContent.jsp', 
     controller: 'ModalCtrl', // ModalCtrl for modal 
     controllerAs:'modal', // as modal so no need to use in modal template 
     size: 'lg', 
     resolve: { 
     items: function() { 
      return $scope.items; 
     }, 
     parent: function(){ // pass self object as a parent to 'ModalCtrl' 
       return self; 
     } 
     } 

और ModalCtrl की तरह:

.controller('ModalCtrl', ['parent', function (parent) { 
    this.parent = parent; 
}]); 

यहां ModalCtrl का उपयोग मोडल के लिएके रूप में किया गया 10 ताकि आप पैरेंट ऑब्जेक्ट का उपयोग कर सकते हैं: modal.parent.user

टेम्पलेट की तरह:

<form role="form" > 
    <div class="form-group"> 
    <label for="FirstName">FirstName</label> <input type="FirstName" 
ng-model="modal.parent.user.firstName" class="form-control" 
id="FirstName" placeholder="Enter FirstName" /> 
     ..... 
     .... 
    <button type="submit" class="btn btn-default" 
ng-click="modal.parent.saveUser(modal.parent.user)">Save</button> 
    <button type="submit" class="btn btn-default">Cancel</button> 
    </form> 

अधिक जानकारी Visit PLUNKER DEMO

+0

सिर्फ एक शब्द सही :) – BenMansourNizar

+0

सही आदमी :) बहुत बहुत शुक्रिया – BenMansourNizar

+0

आपका स्वागत है और यह कर सकते हैं अगर यह आपकी मदद करता है तो मेरा समाधान स्वीकार करें :) @ बेनमांसौरनिज़र –

संबंधित मुद्दे