我正在使用我的博客实施ngTagsInput,以便在添加或修改新帖子时,用户可以向其添加现有或自己的标记。
我的博客使用firebase数据源,可以通过工厂访问:
servicesModule.factory("postsDB", function($resource){
return $resource("https://datasource.firebaseio.com/Posts.json", {
id: "@id"
},
{
update: {
method: "PUT"
},
query: {
method: 'GET',
isArray: false }
});
});
因为需要在其他控制器中使用ngTagsInput函数,所以我希望将其作为服务,因为Tags字段在订单表单中的引用方式不同。 HTML如下所示:
<tags-input ng-model="post.Tags">
<auto-complete source="loadTags($query)"></auto-complete>
</tags-input>
我想为ngTagsInput创建一个服务,该服务引用我上面的其他服务(postsDB
)。我一直在尝试使用以下代码:
servicesModule.factory ( 'AddTags' , function($scope, $http, postsDB) {
var myTags = '';
var myTags = $firebaseArray(postsDB.child('Tags'));
function loadTags (query) {
return $http.get('/Tags?query=' + query);
};
});
在我的控制器中:
controllersModule.controller('AddPostCtrl', ["$scope", '$location', '$firebaseArray', '$sce', 'postsDB', 'AddTags', function($scope, $location, $firebaseArray , $sce, postsDB, AddTags){
AddTags(function(myTags){
$scope.post.Tags = myTags;
});
但是,我收到以下错误:
Error: [$injector:unpr] Unknown provider: $scopeProvider <- $scope <- AddTags
似乎没有将AddTags识别为工厂服务。如何将目标$scope.repeatevariable.Tags
映射到Firebase源中的myTags键?
编辑 - 引发错误:
ervicesModule.factory ( 'InputTags' , function($http, postsDB, $firebaseArray) {
var myTags = '';
var myTags = $firebaseArray(postsDB.child('Tags'));
function loadTags (query) {
return $http.get('/tags?query=' + query);
};
});
答案 0 :(得分:0)
$scope
在工厂内无法使用。在工厂中使用$ scope是没有意义的。来自Angular文档:Scope is the glue between application controller and the view.
答案 1 :(得分:0)
很明显,您甚至不在工厂中使用$ scope对象。所以只需从工厂构造函数依赖项中删除它,你就可以了。