2014-01-08 38 views
0

我是AngularJS新手。AngularJS:呈现部分动态属性

我正在寻找加载partials时传递数据。

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

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

并且在对象“雇员”的定义的图:

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

下面是我写的一个指令(在coffeescript中)几乎可以工作。在上面的例子中,query_string属性被传递(感谢链接函数中的作用域[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"> 

在我的问题破解。这就是说我对这个解决方案并不满意,我很惊讶没有现成的解决方案。我是否全部错了?有没有更好的方法来做到这一点,或者一种方法来解决我的指令,使其按照我想要的方式工作?

回答

0

因此,基本上提出的是一种为特定视图初始化数据的方法。如果是这样的话,真的应该为每个视图指定一个不同的控制器。这正是Angular官方教程所采用的方法。我建议看看routing(定义分配给这些路径的模板路径和控制器)和custom services(从外部源获取数据,然后初始化两个独立控制器的$ scope变量)的教程章节。你所描述的内容是作为一个基本的应用程序体系结构内置到Angular中的,我建议不要试图重复Angular已经处理好的内容。

+0

感谢您的链接。我不确定他们是我在找什么。我想像一个单一的视图,其中有几个部分加载到它。我来自一个rails背景,并且想要像我使用rails一样构造我的代码(**也许这是错误的方法?**)。为了让你知道我要去哪里...我有一个复杂的模式ModelA has_many ModelB's has_many ModelC's has_one ModelD等等。我想创建一个表单,这将允许我在单个页面上创建/编辑整个树(ModelA及其所有的子/孙)。 – brook

+0

Gotcha。它似乎在网站上有类似的问题,例如http://stackoverflow.com/questions/13422966/how-to-specify-model-to-a-nginclude-directive-in-angularjs。 – user3043124

+0

这是非常接近 - 有很多类似的问题,但我还没有找到任何处理我的要求:templateUrl的动态url(我的指令解决了这个问题),动态数据都作为字符串传递(如“query_string “上面是我的指令),以及需要处理的对象(例如”company.employees“,我只能通过明确命名参数,如**数组**和**数据** )。再次感谢您的帮助。我没有通过你发送的教程,虽然它不是我在这里需要的,但它对我来说会很有用 – brook