Javascript 如果不响应模型更改,则为Ng

Javascript 如果不响应模型更改,则为Ng,javascript,html,angularjs,Javascript,Html,Angularjs,我正在一个angular应用程序中共同开发一个登录系统UI,我希望注册和登录菜单根据按钮的按下而显示。我可以用一个.on方法在控制器中实现这一点,但显然这是正确使用angular的糟糕做法 我的代码如下(去掉不必要的位): 登录内容 注册帐户 注册内容 我不知道我做错了什么,也不知道这是否是正确的方法。使用登录字段创建一个对象。在登录时使用它,这样模型就会得到更新 演示 var-app=angular.module('todoApp',[]); app.controller(“dobCo

我正在一个angular应用程序中共同开发一个登录系统UI,我希望注册和登录菜单根据按钮的按下而显示。我可以用一个.on方法在控制器中实现这一点,但显然这是正确使用angular的糟糕做法

我的代码如下(去掉不必要的位):


登录内容
注册帐户
注册内容


我不知道我做错了什么,也不知道这是否是正确的方法。

使用登录字段创建一个对象。在登录时使用它,这样模型就会得到更新

演示

var-app=angular.module('todoApp',[]);
app.controller(“dobController”、[“$scope”,
职能($范围){
$scope.user={};
}
]);

待办事项清单
登录内容
注册帐户
注册内容
  • 不要将
    ng model
    放在您的第一节标签上

  • 声明
    $scope.params={}
    ;在控制器中,然后将其参数
    login
    设置为
    true


  • 检查

    
    注册帐户
    登录内容
    注册内容
    登录名为:{{params.login}
    
    如上所述,由于ngIf指令创建了隔离作用域,所以您需要在模型中添加一个点,否则对原语值所做的更改将不会“传播”回控制器

    因此,在控制器中创建一个对象而不是原语,即

    $scope.someModel={login:true}


    并在HTML中将其引用为
    “someModel.login”
    。通过这种方式,您还可以摆脱ngInit,因为它不一定是一个很好的用例。

    ngIf创建独立的作用域,因此它不会更新控制器上的“login”。您的模型中需要一个点,即someModel.login。@Zyga,即:类似这样的东西是的,可能有更好的命名:)如果您了解我的意思,您实际上需要创建具有“login”属性的“login”对象。按钮应该位于部分之外有什么特殊原因吗?
    <section ng-model="login" ng-init="login=true">
        <section ng-if="login">
            LOGIN CONTENT
            <button ng-click="login = !login">Sign up for an account</button>
        </section>
        <section ng-if="!login">
            SIGN UP CONTENT
        </section>
    </section>
    
    <section ng-init="params.login = true">
      <section ng-if="params.login">
        <button ng-click="params.login = !params.login">Sign up for an account</button>
        LOGIN CONTENT
      </section>
      <section ng-if="!params.login">
        SIGN UP CONTENT
      </section>
      login is: {{params.login}}
    </section>