这是我的两个指令。我基本上想要分享它们之间的范围。但是,我得到一个未定义的$http
错误。我知道我需要把$http
放在某处,但在哪里?
aresAnalytics.directive('market', function($http) {
return {
restrict: 'E',
controller: function ($scope, Data) {
$scope.data = Data;
},
link: function(scope, element, attrs) {
element.bind('click', function() {
console.log("A1 " + attrs.market);
scope.temp = attrs.market;
$http.get('get_markets').success(function(markets) {
Data.markets = markets;
});
})
}
}
});
aresAnalytics.directive('events', function($http) {
return {
restrict: 'E',
controller: function ($scope) {
scope = $scope;
},
link: function(scope, element) {
element.bind('click', function() {
console.log(scope.temp);
});
}
}
});
HTML:
<market ng-repeat="market in data.markets" market="{{ market }}">
{{ market }}
</market>
另外,我认为我这样做的方式
$http.get('get_markets').success(function(markets) {
Data.markets = markets;
});
不正确,我可以用它代替什么。
而且,我应该使用Isolate Scope'@'吗?这看起来怎么样?
感谢您阅读本文!
答案 0 :(得分:0)
问题在于您的依赖注入。试试这个:
aresAnalytics.directive('market', ['$http', function($http) {
// (you code)
}]);
或者如果您不使用代码缩写器/ uglifiers:
aresAnalytics.directive('market', function($http) {
// (you code)
});
答案 1 :(得分:0)
您需要像这样注入$http
服务。
app.directive('something', function( $http ) { ... });
要访问类似的属性,有很多方法,但这是一种简单的方法。
将html更改为
<market ng-repeat="market in data.markets" market="market">
{{ market }}
</market>
需要像这样解析
app.directive('something', function( $http, $parse ) { ... });
并获得您的属性
scope.temp = $parse(attrs.market)(scope);
这样你直接从范围获取它,而另一种方式,angular还没有呈现属性。
答案 2 :(得分:0)
我不知道,但我只需将$parent
附加到我的范围,以便始终使用父范围。 (例如使用scope.$parent
代替scope
)。
参考:https://github.com/angular/angular.js/wiki/Understanding-Scopes