Angularjs 控制器的作用域未传递到指令
我有这样一个html:Angularjs 控制器的作用域未传递到指令,angularjs,angularjs-scope,Angularjs,Angularjs Scope,我有这样一个html: <div id="create-group" ng-controller="groupCreateController"> <div id="container"> <h1>Create group</h1> <div class="row"> <div class="col-md-4"><input placehol
<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>
在第一段代码中,我有两个自定义指令用于用户权限和用户。我随指令传递的组范围不包含我在getUserGroup(id)函数中输入的值。显示组名称和组描述,以便填充控制器中的scope.group,但是,一旦我将其传递给指令,情况就不是这样了。以下是指令代码:
权限列表:
(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'));
有人能帮忙吗?您不能将属性分配给这样的数组
$scope.group.id=0代码>
使$scope.group
对象
$scope.group = {};
或者将属性添加到索引中
$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 = '';
}
};
因此,我通过添加broadcast在指令加载时发送id来解决这个问题。这成功了
在Group controller中,我添加广播并发送Group.id
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);
});
}
在许可指令中,获取该广播:
$scope.$on(rCubeTopics.userMgtPermissionLoadData, function (event, id) {
console.log($scope.group.id);
getData();
});
我像你说的那样改了。但是现在我得到了一个错误:TypeError:无法设置未定义的属性“id”使用0
index更改getUserGroup(id)
内容,所以您可以创建一个plnkrwhere是服务它基本上从数据库获取组名、描述和id。这是工作,我能够填写文本框。但是,当我将组范围发送到我的用户权限指令时,该组范围的长度显示为=0,并且名称、说明和id不在其中。。。
$scope.$on(rCubeTopics.userMgtPermissionLoadData, function (event, id) {
console.log($scope.group.id);
getData();
});