Angular JS范围不从包含的模板更新

时间:2014-10-01 17:55:57

标签: angularjs angularjs-scope angular-template

所以我在index.html下面:

<div ng-controller="UsersController">
<div ng-include='"assets/users/partials/template.html"'></div>
<a ng-click="get_data()">Get</a>
</div>

Template.html:

<input type="text" ng-model="SearchUser" name="SearchUser" />

我的控制器:

app.controller('UsersController', ['$scope', function($scope) {
    $scope.get_data = function(){ console.log($scope.SearchUser); };
}
]);

因此,在上面的单击锚点的情况下,我在$scope.SearchUser范围值中未定义。 但是,如果我从模板中取出输入并放入主HTML,它就可以工作。

我检查过多个控制器声明和其他内容,但没有任何对我有用。

我使用的是角度1.2.25版本。

1 个答案:

答案 0 :(得分:6)

ng-include定义了自己的范围,它继承自控制器范围。因此,SearchUser已设置,但作为子范围的属性。

与往常一样,解决方案是在ng模型中有一个点,并在控制器范围内定义外部对象:

$scope.state = {};

,在HTML中:

<input type="text" ng-model="state.SearchUser" name="SearchUser" />

这样,angular将从子范围获取state字段。由于子范围原型扩展了控制器范围,因此它将在控制器范围内找到它,并且它将写入状态对象的SearchUser属性。