2013-04-11 77 views
2

我是AngularJS的新手,我正面臨與視圖相關的問題。我有這樣的(僞代碼)的模型AngularJS的設計問題 - 嵌套視圖

class Contract{ 
    int IdContract; 
    int Title; 
    int IdPerson; 
} 

class Person{ 
    int IdPerson; 
    string FirstName; 
string LastName; 
} 

現在,我應該有這條​​路線的myapp /合同/編輯相匹配的視圖contractEdit.html。在該觀點中,應該有某種嵌套視圖來顯示與我正在編輯的合同相關聯的人員詳細信息。我應該如何與Angular做到這一點?我對Views和Directives感到困惑......它應該是一個指令嗎?

任何幫助將不勝感激

+0

你可以使用[NG-包括(http://docs.angularjs.org/api/ng.directive:ngInclude )拉入部分以顯示人物細節。 – 2013-04-12 03:07:26

+0

對不起,我剛剛看到你的帖子,我錯過了它。實際上,使用ng-include似乎是可能的,但就我的研究而言,使用指令似乎更常見,也更乾淨,即使其他人傾向於說應該使用ui-router。我想我會採取指導性的方式。 – Sam 2013-04-13 15:32:03

回答

2

有多種方法可以解決這個問題。

首先很簡單,很髒,使用ng-include。例如。創建一個名爲PersontTmpl.html模板文件:

<div> 
    {{person.firstName }} {{person.lastName}} 
</div> 

現在,每當你需要顯示一個人,確保有一個person對象的範圍,並添加以下行:

<ng-include src="'somepathToTemplate/PersonTmpl.html'"></ng-include> 

嗯,這是骯髒的解決方案,因爲你將永遠不得不向同一名稱下的作用域公開人員。

第二種方式是創建一個指示:

angular.module('nameofyourmodule') 
    .directive('person', function() { 
    return { 
     templateUrl: 'somepathToTemplate/PersonTmpl.html', 
     restrict: 'AE', 
     scope:{person:"="} 
    }; 
    }); 

現在,當你想顯示「currentPerson」你必須做以下的事情在其他模板/視圖:

<div person='currentPerson' /> 

此調用將顯示用'currentPerson'對象初始化的人員模板。

要真正理解指令是如何工作的,我建議看Writing Directives (by Misko Hevery)演示,或者嘗試閱讀official documentation

+0

我必須已經完成了整個文檔,並沒有真正提供任何示例來解決這個特定的(但是非常普遍的)問題,所以,謝謝你給我一些線索。我實際上已經得出結論,指令是要走的路,我的'嵌套視圖'實際上比顯示名字和姓氏要複雜得多(但你已經猜到了)。需要爲該指令設置一個控制器,但似乎可能,我只是不知道是否有很多日誌ic在指令中...... – Sam 2013-04-13 08:05:14

+0

@那麼,在指令中有一個控制器是完全有效的(在指令定義對象中有一個特殊的參數),它也是將參數傳遞給控制器​​的唯一可靠方法。指令本身也不包含任何邏輯。所有這些都將被委派到控制器和模板中,指令本身將簡單地重用它,並且它們將共享相同的範圍。我可以添加示例如何在指令中使用控制器如果您想 – jusio 2013-04-13 15:11:48

+0

沒關係,我已經在線看到了一些示例。但它們都非常簡單。我想我將不得不在SO上發佈一個新問題來解釋我想要實現的全貌。我需要先玩指導。謝謝! – Sam 2013-04-13 15:29:56

0

它不應該是指令。

您考慮嵌套視圖和您的權利。目前AngularJS不支持嵌套視圖,但有Router項目,它不會

如果你不想走那麼遠,然後堅持觀點。

+0

我超級超級與Angular混淆。我遇到過這個鏈接(http://www.bennadel.com/blog/2441-Nested-Views-Routing-And-Deep-Linking-With-AngularJS.htm),這個人解釋了他是如何開發一個工作 - 圍繞缺乏嵌套視圖。然後,我已經穿過這個鏈接(http://jan.varwig.org/archive/how-to-do-nested-views-in-angularjs-hint-dont),他們在那裏解釋說我們不應該使用嵌套而不是使用指令。我剛剛通過了指令文檔。在這種特殊情況下,我會試圖使用它們。然後有你,告訴我我不應該:) – Sam 2013-04-11 21:50:27

+0

正如你所指出的第一個傢伙顯示工作,這很好。我建議你閱讀這些https:// github。com/angular-ui/ui-router/wiki並查看一下示例http://angular-ui.github.io/ui-router/sample/對於第二個人他有點重要,因爲人們可能已經以錯誤的方式接近嵌套視圖。 UI路由器似乎是一個正確的方式。你可以谷歌其他嵌套視圖相關的問題,它都指向路由器 – Marek 2013-04-11 22:01:12

+0

所以這兩個人都是對的。這很難做出決定。我可以看到ui-router的意義,因爲它看起來更像我習慣的(我來自ASP.net MVC世界,其中有類型/控制器/動作/參數的URL。另一方面,ui -router似乎是一個獨立的項目,可能永遠不會是Angular的一部分,我即將開始一個大型項目,所以我有點害怕開始使用這種類型的項目(不是它不好,但它可能會不是持久的,艱苦的生活...... – Sam 2013-04-12 06:58:53