2017-05-17 4 views
2

ich eine html wie diese haben auf die Richtlinie:Scope von der Steuerung nicht passieren

<div id="create-group" ng-controller="groupCreateController"> 
     <div id="container"> 
     <h1>Create group</h1> 
     <div class="row"> 
      <div class="col-md-4"><input placeholder="Group Name.." ng-model="group.name"></div> 
      <div class="col-md-8"> 
       <label>Group Description : </label> 
       <textarea ng-model="group.description">  </textarea> 
      </div> 
     </div> 
     <br/> 
     <div class="row"> 

      <div class="col-sm-6"> 
       <usermgr-permission-list group="group"></usermgr-permission-list> 
       <button type="button" class="btn btn-md btn-primary" ng-click="btnSave_click($event)">SAVE</button> 

      </div> 
      <div class="col-sm-6"> 
       <usermgr-user-list group="group"></usermgr-user-list> 
      </div> 
     </div> 

    </div> 
</div> 

Mein Controller ist:

(function (module) { 
'use strict'; 

module.controller('groupCreateController', function ($scope, $rootScope, $routeParams, $location, userGroupService, $mdDialog) { 


    $scope.group = []; 
    $scope.init = function() { 
    if ($routeParams.hasOwnProperty('id')) { 
      //edit mode 
      // $scope.trans.heading = 'Edit Release'; 
      // $scope.trans.saveBtn = 'Save'; 
      var id = parseInt($routeParams.id); 
      getUserGroup(id); 
     } else { 
      $scope.group[0].id = 0; 
      $scope.group[0].permissions = []; 
      $scope.assignedPermissions = []; 
      $scope.enrolledUsers = []; 
      $scope.group[0].users = []; 
      $scope.group[0].name = ''; 
      $scope.group[0].description = ''; 
     } 
    }; 

    function getUserGroup(id) { 
     userGroupService.getbyid(id).then(function (info) { 

      if (info !== undefined && info.id === id) { 
       $scope.group[0].id = info.id; 
       $scope.group[0].name = info.name; 
       $scope.group[0].description = info.description; 
       console.log($scope.group); 
       // $rootScope.$broadcast('rCube-user-mgt-users-list', info.id); 
       // $rootScope.$broadcast('rCube-user-mgt-permissions-list', info.id); 
      } 
      else { 

      } 
     }).catch(function (exception) { 
      console.error(exception); 

     }); 
    } 



    $scope.init(); 


}); 

})(angular.module('r-cube-user-mgt.user-group')); 

Ich habe zwei benutzerdefinierte Richtlinien im ersten Block des Codes für Benutzerberechtigungen und Benutzer. Der Gruppenbereich, den ich mit der Direktive übergebe, enthält nicht die Werte, die ich in die getUserGroup (ID) -Funktion einfüge. Der Gruppenname und die Gruppenbeschreibung werden angezeigt, so dass die scope.group im Controller gefüllt ist. Dies ist jedoch nicht der Fall, nachdem ich sie an meine Direktiven übergeben habe. hier ist der Richtlinien-Code als auch:

Berechtigungsliste:

(function (module) { 
    'use strict'; 
    module.directive('usermgrPermissionList', function() { 
     return { 
      restrict: 'E', 
      scope:{ 
       group: '=' 
      }, 
      controller: function ($scope, permissionService) { 
       $scope.updatedPermissions=[]; 
       console.log($scope.group); //it doesnt have the values from the controller .. 
       if (!$scope.group.hasOwnProperty('permissions')) { 
        $scope.group.permissions = []; 
       } 

       function getData() { 
        console.log("inside getDAta for permission list" + $scope.group.id; 

        permissionService.getPermissionsFiltered($scope.group.id).then(function (info) { 
         if (info && info.length > 0) { 
          console.log(info); 
          $scope.group.permissions = info.map(function (a, index, array) { 
           return { 
            id: a.id, 
            name: a.name, 
            description: a.description, 
            assigned: a.assigned 
           }; 
          }); 
         } 
        }).catch(function (exception) { 
         console.error(exception); 

        }); 
       } //end of getData() 

       $scope.init = function() { 
        getData(); 
       }; 


       $scope.init(); 
      }, 
      templateUrl: 'r-cube-user-mgt/permission/list/list.tpl.html' 
     }; 
    }); 
    })(angular.module('r-cube-user-mgt.permission')); 

kann jemand helfen?

Antwort

1

Sie können nicht zuordnen Eigenschaft auf ein Array wie diese $scope.group.id = 0; entweder machen $scope.group Objekt

$scope.group = {}; 

oder Eigenschaften hinzufügen zu einem Index

$scope.group = []; 
    $scope.init = function() { 
    if ($routeParams.hasOwnProperty('id')) { 
      //edit mode 
      // $scope.trans.heading = 'Edit Release'; 
      // $scope.trans.saveBtn = 'Save'; 
      var id = parseInt($routeParams.id); 
      getUserGroup(id); 
     } else { 
      $scope.group[0].id = 0; 
      $scope.group[0].permissions = []; 
      $scope.assignedPermissions = []; 
      $scope.enrolledUsers = []; 
      $scope.group[0].users = []; 
      $scope.group[0].name = ''; 
      $scope.group[0].description = ''; 
     } 
}; 
+0

ich es geändert, wie Sie erwähnt. Aber jetzt bekomme ich einen Fehler: TypeError: Kann die Eigenschaft 'id' von undefined – Shayuh

+0

nicht ändern den 'getUserGroup (id)' Inhalt mit '0' Index auch –

+0

können Sie ein PLNKR erstellen –

0

Also habe ich das Problem gelöst, indem Broadcast Hinzufügen der senden ID, wenn die Anweisung lädt. Das hat funktioniert!

im Konzern-Controller hinzufügen i Broadcast- und

function getUserGroup(id) { 
        userGroupService.getbyid(id).then(function (info) { 

         if (info !== undefined && info.id === id) { 
          $scope.group.id = info.id; 
          $scope.group.name = info.name; 
          $scope.group.description = info.description; 
          console.log($scope.group);              
        $rootScope.$broadcast(rCubeTopics.userMgtPermissionLoadData, $scope.group.id); 
         } 

        }).catch(function (exception) { 
         console.error(exception); 

        }); 
       } 

und in der Berechtigungsrichtlinie, dass die Sendung erhalten die group.id senden:

 $scope.$on(rCubeTopics.userMgtPermissionLoadData, function (event, id) { 
        console.log($scope.group.id); 
        getData(); 
       }); 
Verwandte Themen