当前位置: 首页 > 面试题库 >

如何从AngularJS中的模板调用服务?

娄学文
2023-03-14
问题内容

我有一个服务返回一个由它生成的json对象,为简便起见,它看起来像这样:

.service ('levelService', function () {

    // service to manage levels.
    return  {
        levels : [{name:'Base', href:'base'},{name:'Level 1', href:'level1'},{name:'level2', href:'level2'}]
    };

})

我认为这很好,但是我现在想在模板中使用它。目前我有这样的事情:

<ul class="dropdown-menu" ng-init="levels = [{name:'Base', href:'base'},{name:'Level 1', href:'level1'},{name:'level2', href:'level2'}];">
                      <li ng-repeat="level in levels">
      <a ng-href="#/modeling/level/{{level.href}}">{{level.name}}</a></li>
                  </ul>

如何获取ng-init以立即使用该服务?我觉得做对的事是将服务添加到控制器,但这在任何控制器之外。我需要为此空间创建一个新的控制器,还是可以直接引用该服务?


问题答案:

是的,创建控制器是最佳实践。

MVC应用程序体系结构背后的想法是,您不会将对象/类紧密地耦合在一起。将服务注入到控制器中,然后将其添加levels到控制器中,这$scope意味着您的HTML不必担心它从何处获取数据。

同样,ng-init以这种方式使用可以很好地生成一个非常快速的原型,但是这种方式不应该在生产代码中使用(因为模型的数据本身与视图的HTML紧密耦合)。

提示:将控制器用于您的父容器dropdown-menu(即页面/节),然后对dropdown- menu自身使用指令可能是一个好主意。将指令视为视图组件。

通常,您可能会发现egghead.io上的视频教程很有帮助。



 类似资料:
  • 问题内容: 我的角JS模板中有一个块 但是,foo.id属性有时可以包含时髦字符(’/’)。我想做这样的事情: 但这行不通吗?我怎样才能解决这个问题? 问题答案: 您可以创建一个过滤器来调用 例如 然后做 运行示例:http://jsfiddle.net/YApdK/

  • 问题内容: 我有一个关于如何从模板HTML按钮调用视图函数的问题?像onclick函数一样?这是模板: 而views.py是: 非常感谢你。 问题答案: 一种选择是,你可以使用 像这样: (删除和) 如果你想加载页面的特定部分,而无需重新加载页面-你可以 和一个听众

  • 这是我的模板: 这是我的视图模板: 我得到的内容是html,我想在视图中显示,但我得到的只是原始html代码。如何呈现HTML?

  • 问题内容: 我正在使用socket.io在我的应用中启用聊天功能,并且正在使用一项服务来执行所有套接字操作。当出现消息时,我想从服务中触发控制器的功能以在UI中进行一些更改。所以我想知道如何从服务访问控制器的功能。样例代码: 这是服务的示例代码。 现在控制器的代码 问题答案: 您可以通过使用角度事件或来实现此目的。 在您的情况下会有所帮助,您需要广播事件,以便具有相同事件名称的所有子作用域都可以监

  • 问题内容: 假设我有 如何从html / template使用此方法?我的模板中需要这样的东西: 问题答案: 只需省略括号就可以了。例: 根据文档,您可以调用任何返回一个值(任何类型)或两个值(如果第二个是type)的方法。在后一种情况下,如果该错误为非nil ,则将返回该错误并停止执行模板。

  • 问题内容: 我有以下angularjs服务: 如何从旧版js代码中调用函数? 问题答案: 使用angular.injector。使用您的代码,您可以执行以下操作: 这是jsfiddle:http : //jsfiddle.net/wGeNG/ 注意 -加载自定义模块之前,您需要添加“ ng”作为第一个模块,因为示例代码取决于ng模块中的$ http提供程序。 编辑 - 在OP的答案中使用, 但 请