我正在向我现有的应用程序添加少量的angularjs。我开始使用控制器来管理我的表单,这都是由ajax提交的。表单目前是使用jQuery的$.load()
函数拉入页面的,并且表单元素已经有值了。
我希望我的模型我已经分配到$scope有这些值可用。例如:
<form>
<input type="text" ng-model="user.firstName" value="Gregg" />
<input type="text" ng-model="user.lastName" value="Bolinger" />
<button ng-click="update(user)">Save</button>
</form>
然后在main。js文件中,我将有如下内容:
function UserCtrl($scope) {
$scope.update = function(user) {
// update the user
};
}
因为ng-model是空的,所以我的表单输入元素是空的。是否有一种方法来初始化我的ng模型与现有的值在形式?顺便说一句,我确实读过这个SO问题,这和我的问题一样,但是,我希望得到一个比一些窗口作用域的全局变量更好的答案。
这里真正的大问题是,在您当前的设置中,jQuery在angular世界之外运行。它没有角作用域的概念,也没有任何真正的方法来访问它们,而不会有点笨拙和违背angular的工作原理,但是如果你想的话,你可以这样做。
从jQuery加载完数据后,你可以直接在angular模型中设置这些值,而不是设置表单的值。比如你的页面是
<div class="wrapper" ng-controller="UserCtrl">
<form>
... inputs as in your post ...
</form>
</div>
然后在控制器中放入
$scope.user = {
firstName: "",
lastName: ""
}
那么你实际上可以在任何时候从jQuery获得角度作用域。在本例中,您只需执行
$(".wrapper").scope();
在jQuery中,你可以获取你正在做的数据,然后在范围内赋值。例如,你可以输入
var user = ... load data with jquery here ...;
var scope = $(".wrapper").scope();
var $user = scope.user;
scope.$apply(function() {
$user.firstName = user.firstName;
$user.lastName = user.lastName;
});
从理论上讲,这应该能满足你的要求。
然而,我强烈建议你将数据加载也移到angular中,因为这使生活变得更容易,更少令人困惑。Angular让数据加载和jQuery一样简单,这很好,如果你要使用ngResource(我个人很喜欢),你可以通过简单的 来获取一个用户。User.get({ id: user_id_here })
就是这样。然后在控制器中,你只需输入
$scope.user = User.get({ id: user_id_here })
表单将被设置为:)
但正如我所说,如果你愿意,你可以让它与当前结构内联运行