AngularJS控制器$scope在ng if指令内不工作

AngularJS控制器$scope在ng if指令内不工作,angularjs,data-binding,2-way-object-databinding,Angularjs,Data Binding,2 Way Object Databinding,我有一个登录表单,但由于某种原因,数据没有绑定在HTML和控制器之间。这是我的代码: home.html config.js 执行此操作时,login函数的控制台输出为 username: undefined password: undefined is logged in: false 但是,如果我将以下内容添加到//此处添加的代码部分中的控制器中 scope.username = 'admin'; scope.password = 'admin'; 控制台提供以下信息: username

我有一个登录表单,但由于某种原因,数据没有绑定在HTML和控制器之间。这是我的代码:

home.html config.js 执行此操作时,
login
函数的控制台输出为

username: undefined
password: undefined
is logged in: false
但是,如果我将以下内容添加到
//此处添加的代码
部分中的控制器中

scope.username = 'admin';
scope.password = 'admin';
控制台提供以下信息:

username: admin
password: admin
is logged in: true
i、 它工作正常。所以问题是:为什么我的视图(
ng model=“…”
)没有绑定到控制器的作用域?我错过了什么


提前感谢您的回答。

尝试绑定到对象:

$scope.myForm = {
    userName: '',
    password: '',
    // ...
};

<input type="text" placeholder="Username" ng-model="myForm.username">
$scope.myForm={
用户名:“”,
密码:“”,
// ...
};

由于原型继承,
ng model
最初是从父作用域(您的控制器)读取的。但一旦用户键入,
ng model
就会写入由
ng if
创建的子作用域,该子作用域继承自父作用域。如果您绑定到一个对象(不是原语),您可以确定您将在同一个位置读写。

只需访问
$parent
范围
$parent.username
$parent.password
,您就可以像这样了

一些指令,如
ng if
确实创建了子作用域,因此您需要访问父作用域。(Thx@FrankModica)。例如,如果您使用的是
ng show
ng hide
,则不需要访问
$parent
范围(使用
ng show


登录

你的
ng controller=“HomeController”
放在哪里?它在
myapp.config
部分,我可以确定它工作正常。你能添加更多代码吗?让我们看看您的控制器以何种方式绑定到视图。@lin,请检查更新。如果你需要更多信息,请告诉我。谢谢你的评论。这会起作用,但不推荐,因为它很脆。如果更新页面并添加新范围,您可能会遇到问题。太好了!,工作得很好。但是为什么我需要访问父范围?(什么是父范围?这是我第一次需要使用它)谢谢你,我会考虑你提到的可能的问题。我现在已经在编辑中看到了解释。再次感谢
scope.username = 'admin';
scope.password = 'admin';
username: admin
password: admin
is logged in: true
$scope.myForm = {
    userName: '',
    password: '',
    // ...
};

<input type="text" placeholder="Username" ng-model="myForm.username">
<form ng-if="!loggedIn">
    <input type="text" placeholder="Username" ng-model="$parent.username">
    <input type="password" placeholder="Password" ng-model="$parent.password">
    <button type="submit" data-ng-click="login()">Login</button>
</form>