-12

我认为这个问题的模糊性是问题的一部分,所以我真正的第一个问题是,在 Angular 中,你叫什么东西

我要命名的东西是视图加上控制器,在单个对象的模型上。我什至不知道该怎么称呼它。对于我提前知道我需要的东西,我一直在创建指令,但是你把指令创建的东西的一个实例称为什么?

我有几种情况突然(为了响应一些外部事件),我在模型中有一个新对象,我想在屏幕上显示它。Angular 似乎希望我在其父视图中从头开始列出所有可能的视图,但这在我的情况下并不合理。例如,我将如何列出所有弹出窗口和工具提示以及其他内容。

我在一些小的边缘情况下,在控制器代码的深处,它需要向当前视图添加一些东西。什么是公认的做法。

顺便说一句,$route/ng-view 正是这种情况的一种。包含 ng-view 的视图和 ng-view DIV 本身不知道 $route 模块将在 ng-view 中放入什么。我需要这个策略的更一般的情况。

编辑

人们一直在寻找一个例子。这个怎么样:我正在制作一个设备申请应用程序。当用户要求将 1000 种不同类型的设备中的一种发送给他时,我需要显示一个弹出窗口来收集特定于该类型的附加信息。如果他要螺丝刀,弹出窗口会询问刀片尺寸、颈部长度和手柄组成;如果他要一架飞机,那将是一个巫师向他询问发动机尺寸、油箱、座位安排的问题。应用程序在启动时只知道所有设备类型的列表,以及收集有关每个特定类型的所有后续信息的 UI 元素的名称。

4

4 回答 4

2

I'm down in some little edge case, deep in the controller code, and it needs to add something to the current view. What's the accepted practice.

Somewhere, you need to define all of the views you'll need -- e.g., all of the equipment popups. You could put each view into a separate file and use ng-include to dynamically pull in the one you currently need to display. Define a property on your $scope (e.g., $scope.equipmentTypeViewUrl), then

<div ng-include src="equipmentTypeViewUrl"></div>

Since ng-view can only appear once per page, ng-include is probably not what you need to use if you need multiple levels of routing.

See also

于 2012-12-22T20:51:37.580 回答
0

我认为问题在于您认为您需要在控制器中创建“事物”,但实际上您不需要。双向数据绑定的工作方式是您更改某些属性值,并且视图会基于此更改。尽管有弹出窗口和工具提示,但我从未见过这样的用例。

然而,如果你真的必须让控制器显示某些东西,你可以利用 Angular 的事件来做到这一点。您需要两部分:负责显示内容(修改 DOM)的指令和控制器。控制器会 $broadcast 一个带有一些参数的事件,指令会使用 $on 监听这些事件并做出相应的反应。

于 2012-05-09T22:44:38.823 回答
0

我只是确保我有一些有用的代码作为模型进来......

<div class="row" ng-repeat="attribute in attributes">
    <div class="widget" ng-repeat="input in attribute.inputs">
        <input type="{{input.type}}" ng-model="input.value" />
    </div>
</div>

我的知识非常有限,但我所知道的是,如果您的模型有明确的结构,您可以构建一个动态响应它的视图。

于 2013-02-22T01:58:47.200 回答
0

如果所有这些都与您的原始对象(属性或以其他方式)相关,您可以遍历数据,显示属性,并在需要时使用键和过滤器作为标签。恕我直言,这不是一个真正的角度问题,如果您的数据结构更多。如果您有良好的数据结构,您可以使用服务来创建相关的数据对象。

对于相关的弹出窗口,您可以使用指令,甚至可以在那里处理模型数据(仅在结构一致的情况下才推荐)。

如果您不喜欢这种方法,您可以直接在模板中处理数据。

但如果没有更具体的细节,就不会有明确的答案。

于 2013-02-28T23:40:57.627 回答