Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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 - Fatal编程技术网

AngularJS资源调用指令

AngularJS资源调用指令,angularjs,Angularjs,我试图创建一个AngularJS指令,该指令使用模板中的属性值调用使用$resource创建的服务,并使结果在元素范围内可用 我有一个非常简单的服务: services.factory('Concept', ['$resource', function($resource) { return $resource('http://example/api/:id'); }]); 以及一项指令: directives.directive('anConcept', ['Concept', func

我试图创建一个AngularJS指令,该指令使用模板中的属性值调用使用
$resource
创建的服务,并使结果在元素范围内可用

我有一个非常简单的服务:

services.factory('Concept', ['$resource', function($resource) {
  return $resource('http://example/api/:id');
}]);
以及一项指令:

directives.directive('anConcept', ['Concept', function(Concept) {
  return {
    scope: {
      anConcept: '@'
    },
    restrict: 'A',
    controller: function($scope, $element) {
      $scope.results = Concept.get({id: concept});
    }
  }
}]);
然后,我尝试在我的视图中调用此选项:

<div an-concept="1">
  {{results}}
</div>

{{results}}
查看浏览器调试器中的“网络”窗格,我可以看到发出的请求,但结果在元素的范围内不可用


我确信我犯了一个非常基本的错误,但我不知道它是什么。

这是因为
get
的结果是一个承诺。您需要执行以下操作:

Concept.get({id: concept}).success(function(data) {
     $scope.results = data;
};
编辑

对不起,我想我弄错了,
$resource
的工作原理与
$http
有点不同:

Concept.get({id: concept}, function(data) {
     $scope.results = data;
};

这是因为
get
的结果是一个承诺。您需要执行以下操作:

Concept.get({id: concept}).success(function(data) {
     $scope.results = data;
};
编辑

对不起,我想我弄错了,
$resource
的工作原理与
$http
有点不同:

Concept.get({id: concept}, function(data) {
     $scope.results = data;
};

如果您想在指令外看到该值,我会说您不会将其视为简单的。因为您的指令是隔离的-SCOPE指令。这意味着您在该范围内的值将与父范围隔离,并且您不会在指令外看到该值(有一种方法可以获得该隔离范围).但如果您想在指令中看到它,我会说您的代码是正确的代码。如果响应被接受,您的结果将被定义。

如果您想在指令中看到该值,我会说,您不会将其视为一个简单的。因为您的指令是隔离的-SCOPE指令。这意味着您在该范围内的值将与父范围隔离,并且您不会在指令外看到该值(有一种方法可以获得该隔离范围)。但是,如果您希望在指令中看到它,我会说您的代码是正确的代码。如果响应被接受,您的结果将被定义。

请注意,当您使用
$resource
时,您收到的是一个承诺。此外,如果指令的作用域被隔离,则您的
$scope
属性的
结果可能会遇到一些问题

angular.module('myApp',['ngResource']))
.factory('Concept',['$resource',
职能(资源){
返回$resource('https://api.stackexchange.com/2.2/info');
}
])
.指令('anConcept',['Concept',
功能(概念){
返回{
限制:“A”,
链接:函数($scope、$element、$attrs、$controllers){
概念({
站点:$attrs.anConcept
},功能(结果){
$scope.results=results.items[0]。用户总数;
});
}
};
}
]);

stackoverflow用户总数:{results}

请注意,当您使用
$resource
时,您收到的是一个承诺。此外,如果指令的作用域被隔离,则您的
$scope
属性的
结果可能会遇到一些问题

angular.module('myApp',['ngResource']))
.factory('Concept',['$resource',
职能(资源){
返回$resource('https://api.stackexchange.com/2.2/info');
}
])
.指令('anConcept',['Concept',
功能(概念){
返回{
限制:“A”,
链接:函数($scope、$element、$attrs、$controllers){
概念({
站点:$attrs.anConcept
},功能(结果){
$scope.results=results.items[0]。用户总数;
});
}
};
}
]);

stackoverflow用户总数:{results}

谢谢,这确实是一个孤立的范围问题。谢谢,这确实是一个孤立的范围问题。