Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度指令未正确接收对象_Javascript_Jquery_Html_Angularjs_Asp.net Web Api2 - Fatal编程技术网

Javascript 角度指令未正确接收对象

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:

我定义了一个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: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>