AngularJs指令和$ http调用

时间:2014-11-18 10:11:41

标签: javascript angularjs

我创建了一个角度多选指令插件。该指令将数组作为输入。如果需要,我们的想法是将所有插件用于当前和未来的项目。 该数组需要采用以下格式:

[
    { id: 1, name: 'Theme1', selected: false },
    { id: 2, name: 'Theme2', selected: false },
    { id: 3, name: 'Theme3', selected: false },
    { id: 4, name: 'Theme4', selected: false },
    { id: 5, name: 'Theme5', selected: false },
    { id: 6, name: 'Theme6', selected: false },
    { id: 7, name: 'Theme7', selected: false },
    { id: 8, name: 'Theme8', selected: false },
    { id: 9, name: 'Theme9', selected: false },
    { id: 10, name: 'Theme10', selected: false }
]

该指令采用上述输入并转换为此[image url]:

http://pho.to/7wl3E

现在我的同事认为,指令总是必须通过上述格式,这是不可见的。 然后他继续建议该指令必须发出一个API $ http请求来从服务器获取数据, 使用返回的数据创建必要的格式。他还坚持在指令中处理预先格式化的数据和$ http调用。

我辩论说,角度指令不是为此目的而做的,如果在指令中使用$ http调用,则涉及很多事情 像API URL,方法[GET,POST],post的有效载荷数据,需要传递给指令,天气预加载数据是否下拉。

所以与这种情况有关,这是我的问题

  1. $ http会在自定义指令中使用吗?
  2. 我的同事给出了预先格式化数据和$ http调用指令的建议。这是好习惯吗?
  3. 如果第2点不是一个好的做法,这个场景的任何建议或想法,以便我可以让我的同事有信心吗?

3 个答案:

答案 0 :(得分:1)

很多时候需要某些逻辑的指令(特别是服务器逻辑)被分成指令和服务。

回答问题:

  • 是$ http调用在指令中使用的好习惯吗?

    • 可以想象一个指令,你需要在它可以行动之前从服务器获取一些部分,但它只需要它一次,那么调用一次是一个好主意,值缓存指令的所有其他实例。

      但是如果你需要一个自定义http调用每个指令,那么我认为服务是一个更好的方法。

  • 在这种情况下,每个指令都可以从服务器返回某种数据,我认为指令的捆绑服务是一种更好的方法。然后扩展这个逻辑将更容易,更好。

  • 见上文:)

带有指令的捆绑服务:

angular.module('app',[]).service('MultiSelect', ['$http', function($http) {
      this.getMyData = function() {
          $http.get('....');
      };
});
angular.module('app',[]).directive('multieSelect', ['MultiSelect', function(selectService) {
        return {
            link: function($scope, $el, $attr) {
                 $scope.selectData = selectService.getMeMyData();
            }
        }
});

通过这种方式,您可以拥有两个独立的实体,一个在需要的地方多次实例化,另一个实体只负责逻辑。对于他们的许多指令,iirc angular-strap使用这种方法。

我希望有所帮助。

答案 1 :(得分:1)

我认为你的大部分问题都已得到解答,但我可以提出建议。只需从控制器发送格式化的JSON即可。我通常对这样的控件执行的操作不是要求特定格式,而是可以添加displayProperty和keyProperty的范围变量。在你的情况下,它将是id和name然后引用它像yourArray [displayProperty]和yourArray [keyProperty]

答案 2 :(得分:0)

  1. $ http会在自定义指令中使用吗?
  2. 取决于该指令是否是独立功能。 (让我们说你正在制定一个培养自己的指令,而不是用其他任何东西打球)。

    我认为$ http调用只应在服务中进行,然后注入控制器(数据必须具有绑定才能达到指令) - 或者如果你真的必须进入指令。

    但是,保留对服务的$ http请求可以提高可重用性。

    1. 我的同事给出了预先格式化数据和$ http调用指令的建议。这是好的做法吗?
    2. 参见上一个答案。

      1. 如果第2点不是一个好的做法,这个场景的任何建议或想法,以便我可以让我的同事有信心吗?
      2. 我建议你们看一下Angular JS社区提供的主要风格之一。 一个是http://toddmotto.com/opinionated-angular-js-styleguide-for-teams/

        角度编码方式在很大程度上是可以理解的,并且有很多方法可以做到这一点,其中一些更好。