Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.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
Angularjs:如何读取指令中的对象_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Angularjs:如何读取指令中的对象

Angularjs:如何读取指令中的对象,angularjs,angularjs-directive,angularjs-scope,Angularjs,Angularjs Directive,Angularjs Scope,我已将一个对象从控制器传递到指令,但当我在指令中读取对象时,我无法读取,它似乎在指令中对象被读取为字符串。代码如下,我想从对象中读取城市和州 Html File <div ng-controller="WeatherController"> <div weather ng-object="{{Object}}"></div> </div> Controller .controller('WeatherController', ['$sc

我已将一个对象从控制器传递到指令,但当我在指令中读取对象时,我无法读取,它似乎在指令中对象被读取为字符串。代码如下,我想从对象中读取城市和州

Html File

<div ng-controller="WeatherController">    
<div weather ng-object="{{Object}}"></div>
</div>

Controller
.controller('WeatherController', ['$scope', function ($scope) {
   $scope.webpartData.OverviewData.Person.Address.City;
            $scope.Object = {
                City: '',
                State: ''
            };
            $scope.Object.City = 'TestCity';
            $scope.Object.State = 'TestState';         
        });
    })
}])


Directive


angular.module('WeatherModule', [])
.directive('Weather', ["$timeout", function($timeout) {
    return {
        restrict: 'EA',
        template: '<div id="weather"></div>',
        scope: {
            ngObject: '@ngObject'
        },
        link: function(scope, element, attrs) {
            scope.$watch('ngObject', function(value) {
                scope.ngObject = value;
            });
            $timeout(function() {
                console.log('Location' + scope.Object.City + ',' + scope.Object.State);
            }, 100);
        }
    };
}])
Html文件
控制器
.controller('WeatherController',['$scope',函数($scope){
$scope.webpartData.OverviewData.Person.Address.City;
$scope.Object={
城市:'',
状态:“”
};
$scope.Object.City='TestCity';
$scope.Object.State='TestState';
});
})
}])
指示
角度模块('WeatherModule',[])
.directive('Weather',[“$timeout”,函数($timeout){
返回{
限制:“EA”,
模板:“”,
范围:{
ngObject:“@ngObject”
},
链接:函数(范围、元素、属性){
范围$watch('ngObject',函数(值){
scope.ngObject=值;
});
$timeout(函数(){
log('Location'+scope.Object.City+','+scope.Object.State);
}, 100);
}
};
}])

您应该使用“=”而不是“@”。和ng object=“object”而不是ng object=“{{object}”。

在引用指令范围成员时,=和&之间存在差异

 1. "@"   (Text binding / one-way binding)
 2. "="   (Direct model binding / two-way binding)
 3. "&"   (Behaviour binding / Method binding)
@表示控制器作用域的更改将反映在指令作用域中,但如果修改指令作用域中的值,控制器作用域变量将不会受到影响

@始终希望映射的属性是表达式。这很重要,;因为要使“@”前缀起作用,我们需要将属性值包装在{{}中

=是双方向的,因此如果更改指令范围中的变量,控制器范围变量也会受到影响

&用于绑定控制器作用域方法,以便在需要时可以从指令中调用它

在您的情况下,您可能需要使用
=
而不是
@

看看下面这把小提琴(它不是我的,但它有很好的切中要害的插图)

还有一些相关问题:


目前我看到的对象是{“City”:“TestCity”,“State”:“TestState”},scope.object.City和scope.object.State无法读取