首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Angular.js中的指令控制器调用工厂

从Angular.js中的指令控制器调用工厂
EN

Stack Overflow用户
提问于 2014-06-30 20:17:54
回答 2查看 4.1K关注 0票数 2

我正在尝试学习Angular.js,我正在使用ng-boiler来管理我的测试应用程序。

然而,我遇到了一个难题,看不出它不工作的原因。基本上,我尝试注入一个Factory,然后从指令控制器调用它。

但是,当我尝试调用它时,我得到一个错误,报告工厂名称(在本例中为dashboardFac)是未定义的。

我将在下面包含指令和工厂:

指令:

代码语言:javascript
复制
angular.module( 'locationSelector', [
'ngBoilerplate.locationFactory'
] )

.directive( 'locationSelector', function() {
return {
    restrict: 'A',
    //template: '<h3>asdfasdfasd</h3>',
    templateUrl : 'components/locationSelector/locationSelector.tpl.html',
    link: function( scope, element, attrs ) {

        console.log("link working ");

        var $input = angular.element( document.querySelector( '#location' ) );

        $input.bind('focus', function() {
            console.log("stay focused son");
        });

    },
    controller: function($scope, dashboardFac, $element){
        $scope.locyTexy = "";
        $scope.api = dashboardFac;
        console.log($scope.api);
        $scope.change = function() {
            console.log("asdfasd");
            dashboardFac.assets.getLocations().then(function(result){  

            });
        };

    }
    };
})

;

工厂:

代码语言:javascript
复制
angular.module( 'ngBoilerplate.locationFactory', [

  ]).factory('dashboardFac', function($http, $q){
    this.assets = {
      getLocations: function(args) {
      var deferred = $q.defer();
      var parmUrl = "will be some url eventually";
      $http.jsonp({
          method: 'GET',
          url: parmUrl
      }).
      success(function(data, status) {
         deferred.resolve(data);
       }).
       error(function(data, status) {
         deferred.reject(data);
       });

      return deferred.promise;
    }
  };
}); 

任何帮助都将是非常令人欣慰的,我有一种感觉,我错过了一些基本的东西,但希望有人能帮助我指出正确的方向。

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-06-30 20:23:51

您必须将dashboardFac工厂注入指令:

代码语言:javascript
复制
.directive( 'locationSelector', function(dashboardFac) {
[…]
})
票数 3
EN

Stack Overflow用户

发布于 2014-06-30 20:28:36

正如Krzysztof Safjanowski指出的那样,您必须首先将factory注入到directive

代码语言:javascript
复制
   .directive( 'locationSelector', function(dashboardFac) {
      […]
    })

然后,您的工厂将必须返回一个对象,就像其他工厂一样:

代码语言:javascript
复制
angular.module( 'ngBoilerplate.locationFactory', [])
  .factory('dashboardFac', function($http, $q){
    return {
      assets: {
        getLocations: function (args) {
          var deferred = $q.defer();
          var parmUrl = "will be some url eventually";
          $http.jsonp({
            method: 'GET',
            url: parmUrl
          }).
            success(function (data, status) {
              deferred.resolve(data);
            }).
            error(function (data, status) {
              deferred.reject(data);
            });

          return deferred.promise;
        }
      }
    }
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24489994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档