2013-09-27 124 views
0

我有一張表,我包括在不同的頁面上,這很好,除非我無法得到包含表中的值。如果我用這個頁面上:AngularJS嵌套表

<div data-ng-include="'/app/views/tasks/tasksTable.html'" /> 

表顯示出來,但我不能顯示在文件tasksTable.html值,這表明undefinded:

 <td> 
      <i class="icon-ok-sign" ng-click="addTask()"></i> 
     </td> 
     <td> 
      <input ng-model="task" /> 
     </td> 

從控制器:

$scope.addTask = function (data) { 
     console.log($scope.task);   
    }; 

如果我把表格放在我的文件中,而不是使用ng-include來顯示錶格,我可以顯示任何我輸入到與ng-model =「task」綁定的輸入。

+0

可能是因爲'ngInclude'創建了新的範圍? http://docs.angularjs.org/api/ng.directive:ngInclude – Cherniv

回答

1

之所以不能訪問任務是由於兩個原因。首先,是因爲ng-include爲作爲父控制器作用域的子模板創建了一個新的作用域。第二個原因是您將字符串模型直接附加到作用域,而不是創建包含模型的對象。我創建了一個working CodePen example來演示如何解決您的問題。

您應該read up on prototypical inheritance and how it affects on scopes

我希望這會有所幫助。

+0

感謝您的鏈接,真的很好的信息。 – tcrafton

+2

雖然答案看起來是正確的,但我認爲它可以歸結爲一個更短的版本:不要在ng模型屬性中使用任何沒有點的東西。在你的例子中你使用「任務」。當創建子範圍時,範圍將被複制,因此您擁有「任務」的獨立副本。在Adam的修改示例中,他使用「task.value」。這裏的「任務」是一個對象,並且一個對象被引用「複製」,因此任務指向父對象和子對象中的相同對象,因此task.value將訪問相同的值。 –

+0

@kju Well說,但是你錯過了提到這個解決方案的另一個關鍵因素。如果您不在父範圍中聲明該對象爲「外部」,那麼它只會在子範圍(ng-include範圍)中創建,並且不會被父範圍訪問。否則,你所說的是100%正確的。總之,#1。始終爲模型使用對象並將其附加到示波器。不要將範圍本身視爲模型並將數據直接附加到它們。 #2。始終在需要訪問模型的最外層範圍內聲明模型。 –