【问题标题】:How do I create a new, uh, thing in Angularjs?如何在 Angularjs 中创建一个新的东西?
【发布时间】:2012-05-06 20:27:45
【问题描述】:

我认为问题的模糊性是问题的一部分,所以我真正的第一个问题是,在 Angular 中,你怎么称呼 事物

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

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

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

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

编辑

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

【问题讨论】:

  • 对不起,但我不明白您的要求...您可以在网站angularjs.org 上看到弹出窗口(查看任何示例的代码,所有突出显示的代码弹出解释)
  • 显然,如果我可以让我的问题更清楚,我会的。你能说它变得不清楚吗?我无法在 angularjs.org 上找到任何带有弹出窗口的代码示例;你有网址吗?
  • 简单工具提示jsfiddle.net/gxw5j
  • @Vojta -- 谢谢,这完全,完全错误。您示例中的所有元素存在于视图中。我需要控件来意识到它需要一个新元素并创建一个。
  • 一个具体的例子可以帮助人们理解你的问题

标签: angularjs


【解决方案1】:

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

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

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

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

另见

【讨论】:

    【解决方案2】:

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

    但是,如果您确实必须让控制器显示某些内容,则可以利用 Angular 的事件来执行此操作。您需要两部分:负责显示内容(修改 DOM)的指令和控制器。控制器会 $broadcast 一个带有一些参数的事件,指令会使用 $on 监听这些事件并做出相应的反应。

    【讨论】:

    • 事实上,我愿意。否则,视图必须有一个它可能显示的所有可能内容的完整列表——我不能做普通的面向对象的事情,比如继承。如果您不相信我,请查看 $route/ng-view 并问自己为什么 ng-view 不知道该路由可能做的所有事情。
    【解决方案3】:

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

    <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>
    

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

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-08-23
        • 1970-01-01
        • 2011-09-04
        • 2014-07-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多