【问题标题】:AngularJS: render partial with dynamic attributesAngularJS:使用动态属性渲染部分
【发布时间】:2014-01-25 22:15:07
【问题描述】:

我是 AngularJS 新手。

我希望在加载部分时传递数据。

我想要一个允许动态属性的指令。例如,在我可以拥有的范围内定义对象“公司”的视图中:

<partial url:"employees/index.html" query_string: "Fun House Inc" employees="company.employees">

并且在定义对象“员工”的视图中:

<partial url:"employees/show.html" employee="employee">

下面是我写的(在咖啡脚本中)几乎可以工作的指令。在上面的示例中,query_string 属性被传递(感谢链接函数中的 scope[k] = v),但 employees 属性没有传递,即它传递的是字符串而不是评估的对象。

App.directive "partial", ->
  restrict: "E"

  scope:
    attribute: "@"
    expression: "&"
    model: "="
    array: "="
    data: "="

  templateUrl: (el,attrs)->
    "/assets/partials/" + attrs.url

  link: (scope,el,attrs)->
    for k, v of attrs
      scope[k] = v if (k[0] != "$" && !scope[k]?)

在这个指令中,我定义了数组、模型和数据,所以我可以通过做类似的事情来解决我的问题

<partial url:"employees/index.html" query_name: "Fun House Inc" array="company.employees">

<partial url:"employees/show.html" model="employee">

在我看来。也就是说,我对这个解决方案并不满意,我很惊讶没有现成的解决方案。我对这一切都错了吗?有没有更好的方法来做到这一点,或者修复我的指令以使其按我想要的方式工作?

【问题讨论】:

    标签: javascript angularjs coffeescript angularjs-directive


    【解决方案1】:

    因此,本质上提出的是一种为特定视图初始化数据的方法。如果是这种情况,则确实应该为每个视图指定不同的控制器。这正是 Angular 官方教程所采用的方法。

    我建议看一下关于routing(定义模板路径和分配给这些路径的控制器)和custom services(从外部源获取数据,然后为两个独立的初始化 $scope 变量)的教程章节控制器)。您所描述的内容实际上是作为基本应用程序架构内置在 Angular 中的,我建议不要制定指令来尝试复制 Angular 已经很好地处理的内容。

    【讨论】:

    • 感谢您的链接。我不确定它们是否是我正在寻找的东西。我正在想象一个视图,其中加载了几个这样的局部视图。我来自 Rails 背景,我希望像使用 rails 一样构建我的代码(也许这是错误的方法?)。为了让你知道我要去哪里......我有一个复杂的模式 ModelA has_many ModelB's which has_many ModelC's which has_one ModelD 等等。我想创建一个表单,允许我在单个页面上创建/编辑整个树(ModelA 及其所有子/孙)。
    • 明白了。网站上好像确实有类似的问题,比如stackoverflow.com/questions/13422966/…
    • 那个非常接近 - 有很多类似的问题,但我没有找到任何可以满足我要求的问题:templateUrl 的动态 url(我的指令解决了这个问题),动态数据都作为字符串(例如上面的“query_string”,它与我的指令一起使用)以及需要处理的对象(例如“company.employees”,我只能通过明确命名的参数来工作,例如 array 数据 )。再次感谢您的帮助。我没有阅读您发送的教程,虽然它不是我需要的,但它对我很有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    相关资源
    最近更新 更多