如何在Angularjs中创建一个新的呃?

时间:2012-05-06 20:27:45

标签: angularjs

我认为问题的模糊性是问题的一部分,所以我真正的第一个问题是,你在Angular中称之为 thing

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

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

我陷入了一些小问题,深入控制器代码,它需要在当前视图中添加一些东西。什么是公认的做法。

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

修改

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

4 个答案:

答案 0 :(得分:2)

  

我陷入了一些小问题,深入控制器代码,它需要在当前视图中添加一些东西。什么是公认的做法。

在某个地方,您需要定义所需的所有视图 - 例如,所有设备弹出窗口。您可以将每个视图放入单独的文件中,并使用ng-include动态提取当前需要显示的视图。在$ scope上定义一个属性(例如,$ scope.equipmentTypeViewUrl),然后

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

由于ng-view每页只能出现一次,因此如果您需要多级路由,则ng-include可能不是您需要使用的。

另见

答案 1 :(得分:0)

我认为问题是你认为你需要在控制器中创建“东西”,但事实上你不需要。双向数据绑定的工作方式是您更改某个属性值,并且视图会根据该值进行更改。我从来没有见过一个用例,尽管这还不够,弹出窗口和工具提示。

但是,如果你真的必须让控制器显示某些内容,你可以利用angular的事件来做到这一点。您需要两个部分:负责显示内容(修改DOM)的指令和控制器。控制器将使用一些参数广播一个事件,该指令将使用$ on监听这些事件并做出相应的反应。

答案 2 :(得分: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>

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

答案 3 :(得分:0)

如果所有这些都与您的原始对象(属性或其他方式)相关,您可以遍历数据,显示属性,如果需要,可以使用标签的键和过滤器。 Imho它不是一个有角度的问题,如果你的数据结构更多的话。如果您拥有良好的数据结构,则可以使用服务来创建相关的数据对象。

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

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

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