所以我在一直遇到的问题上取得了进展,但我不知道从哪里开始。
在我的代码中,我有一个模块,然后是模块外部的指令,但它是注入的。
我在父作用域中有一个名为registrants
的对象。当我启动指令时,指令中的任何活动都会修改父作用域,registrants
将更新。但是,我有另一个变量registrantCount
应该更新,因为注册人列表长度增加但不是。有人能解释一下为什么吗?
以下是我的代码片段,其中包含以下所有相关的peices,如果有一个变量显示我在上面的描述中没有提到,为了完成,假设数据是正确的。我唯一关注的变量是我在最初的问题陈述中提到的两个变量。
模块
angular.module('register', [])
.controller('Register', function($scope, $rootScope, $http){
$scope.registrants = {};
$scope.registrantCount = 0;
$http({
url : 'apiLink for initial data'
}).then(function(data){
$scope.employeeList = data.data.payload[0]; // initial list to allow the directive to function
});
});
指令
angular.module('register.check', [])
.directive('attendees', function($http){
return {
restrict : 'EA',
scope : false,
templateUrl : 'template',
link : function(scope, elem, attrs){
angular.forEach(companies, function(c, key){
if(c.companyID == id){
scope.registrants = c.registrants; // this object is modified in the directive template
scope.registrantCount = scope.registrants.length; // this variable is located in the parent template, not the directive template
}
});
})
};
});
请再次注意,该指令将修改注册人的父范围对象,但它不会修改注册人计数,如果我在指令中修改它,它也不会在父变量中生成正确的长度。我对此事感到非常困惑。感谢您提前获得所有帮助!
答案 0 :(得分:1)
请查看this post,以便更深入地了解正在发生的事情,但简而言之:
Angular中的绑定可能有点棘手。因为$scope.registrants
是一个对象,所以子范围(您的指令)直接引用它 - 它指向同一个对象。因为$scope.registrantsCount
是一个整数(认为它是一个基本类型),你的指令为它创建一个单独的变量,并且双向绑定被破坏。
两个选项:按照miqid的建议,创建一个包含registrantsCount的对象:
$scope.registrantsCount = { count: 0 }
并在指令中更新它:
scope.registrantsCount.count = scope.registrants.length;
...或在控制器中创建一个函数并从指令中调用它:
// in controller
$scope.registrantsCount = 0;
$scope.updateRegistrantsCount = function(count) {
$scope.registrantsCount = count;
}
// in directive
scope.updateRegistrantsCount(c.registrants.length);
我更喜欢后者。