Javascript 角度指令未正确接收对象
我定义了一个person对象(从后端加载),如下所示:Javascript 角度指令未正确接收对象,javascript,jquery,html,angularjs,asp.net-web-api2,Javascript,Jquery,Html,Angularjs,Asp.net Web Api2,我定义了一个person对象(从后端加载),如下所示: { "PersonId":"19894711-2eb9-4edf-92c6-85de2b33d1bb", "Firstname":"Jacky", "Lastname":"Chan", "DateOfBirth":"1963-09-18T00:00:00", "CreateDate":"2015-12-11T09:15:49.403", "ModifyDate":"2015-12-11T09:
{
"PersonId":"19894711-2eb9-4edf-92c6-85de2b33d1bb",
"Firstname":"Jacky",
"Lastname":"Chan",
"DateOfBirth":"1963-09-18T00:00:00",
"CreateDate":"2015-12-11T09:15:49.403",
"ModifyDate":"2015-12-11T09:15:49.403"
}
它使用以下HTML代码正确显示:
<table>
<tr>
<td>Firstname</td>
<td>
<input type="text" ng-model="person.Firstname" class="form-control"/>
</td>
</tr>
<tr>
<td>Lastname</td>
<td>
<input type="text" ng-model="person.Lastname" class="form-control"/>
</td>
</tr>
</table>
链接块上的console.log
显示“person”
(作为字符串,而不是对象)
控制器块上的console.log
显示undefined
我试着用a来模拟它,但在那里它起作用了
有什么想法吗?您最初只是在做日志(因此未定义)。您需要观察对象何时填充,然后执行服务调用
controller: [
"$scope",
function ($scope) {
console.log($scope.person);
$scope.$watch(function(){
return $scope.person;
}, function(){
if($scope.person && $scope.person.PersonId){
$scope.addresses = addressService.GetForPerson($scope.person.Id);
}
});
}],
我可能错了,但是这样做,您只会将字符串“person”传递给您的指令 试试这个:
<address-displayer-directive person="{{person}}"></address-displayer-directive>
这是否只是您在结束HTML标记中的一个输入错误?如果是这样,这肯定是错误的是,复制粘贴错误试图设置我的问题。事实并非如此……如果指令的范围声明中定义了person:'@'
,则需要这样做。(以允许表达式计算)这是有效的!传递的对象(person)是一个promise对象,异步加载,因此很有意义!
controller: [
"$scope",
function ($scope) {
console.log($scope.person);
$scope.$watch(function(){
return $scope.person;
}, function(){
if($scope.person && $scope.person.PersonId){
$scope.addresses = addressService.GetForPerson($scope.person.Id);
}
});
}],
<address-displayer-directive person="{{person}}"></address-displayer-directive>