Angular Material: $scope 无法在 md-tab 中获取 ng-model
Angular Material: $scope can't get ng-model in md-tab
HTML:
<div ng-controller="AppCtrl" class="sample tabsdemoDynamicTabs" layout="column" ng-app="MyApp">
<md-content class="md-padding">
<md-tabs md-selected="selectedIndex">
<md-tab label="Login">
<form name="loginForm">
<md-input-container>
<label>Username</label>
<input type="text" name="login_username" ng-model="login_username" required>
</md-input-container>
<md-input-container>
<label>Password</label>
<input type="password" name="login_passwd" ng-model="login_passwd" required>
</md-input-container>
<md-button class="md-button md-raised" ng-disabled="loginForm.$invalid" ng-click="login()">Login</md-button>
</form>
</md-tab>
</md-tabs>
</md-content>
</div>
JS:
(function () {
'use strict';
angular
.module('MyApp')
.controller('AppCtrl', AppCtrl);
function AppCtrl ($scope) {
$scope.login = function(){
alert($scope.login_username);
alert(this.login_username);
}
}
})();
http://codepen.io/anon/pen/xGdqwa
如果我将表格移到外部 md-tabs
,一切正常。
为什么$scope
无法在md-tabs
中得到ng-model
?
那应该显示错误,如果有的话,更改:.module('MyApp')
到 .module('MyApp', [])
这是一个 angular 作用域继承问题,md-tabs 正在使用子作用域。看到这个问题,相同的解决方案将适用于您:
两件事:
- 您没有在模块中添加
ngMaterial
作为依赖项
像这样
- 在你的控制器中创建一个对象
(function () {
'use strict';
angular
.module('MyApp',['ngMaterial'])
.controller('AppCtrl', AppCtrl);
function AppCtrl ($scope) {
$scope.login = {
username: 'email@example.com',
passwd: ''
};
$scope.dologin = function(){
alert($scope.login.username);
alert(this.login.username);
}
}
})();
HTML
<div ng-app="MyApp">
<div ng-controller="AppCtrl">
<form name="loginForm" >
<md-tabs md-dynamic-height md-border-bottom>
<md-tab label="login">
<md-input-container>
<label>Username</label>
<input type="text" name="login_username" ng-model="login.username" required />
</md-input-container>
<md-input-container>
<label>Password</label>
<input type="password" name="login_passwd" ng-model="login.passwd" required />
</md-input-container>
<md-button class="md-button md-raised" ng-disabled="loginForm.$invalid" ng-click="dologin()">Login</md-button>
</md-tab>
<md-tab label="other tabs"></md-tab>
<md-tab label="other tabs"></md-tab>
<md-tab label="other tabs"></md-tab>
<md-tab label="other tabs"></md-tab>
</md-tabs>
</form>
</div>
</div>
说明:自定义指令有自己的范围,当你使用ng-model
时,变量属于默认范围,在你的情况下md-tabs
,要解决此问题,您可以在控制器中初始化 ng-model
。
不要忘记点。
您没有将模型附加到对象,因此失去了模型的范围。
而不是
ng-模型="login_username"
尝试使用
ng-模型="login.username"
HTML:
<div ng-controller="AppCtrl" class="sample tabsdemoDynamicTabs" layout="column" ng-app="MyApp">
<md-content class="md-padding">
<md-tabs md-selected="selectedIndex">
<md-tab label="Login">
<form name="loginForm">
<md-input-container>
<label>Username</label>
<input type="text" name="login_username" ng-model="login_username" required>
</md-input-container>
<md-input-container>
<label>Password</label>
<input type="password" name="login_passwd" ng-model="login_passwd" required>
</md-input-container>
<md-button class="md-button md-raised" ng-disabled="loginForm.$invalid" ng-click="login()">Login</md-button>
</form>
</md-tab>
</md-tabs>
</md-content>
</div>
JS:
(function () {
'use strict';
angular
.module('MyApp')
.controller('AppCtrl', AppCtrl);
function AppCtrl ($scope) {
$scope.login = function(){
alert($scope.login_username);
alert(this.login_username);
}
}
})();
http://codepen.io/anon/pen/xGdqwa
如果我将表格移到外部 md-tabs
,一切正常。
为什么$scope
无法在md-tabs
中得到ng-model
?
那应该显示错误,如果有的话,更改:.module('MyApp')
到 .module('MyApp', [])
这是一个 angular 作用域继承问题,md-tabs 正在使用子作用域。看到这个问题,相同的解决方案将适用于您:
两件事:
- 您没有在模块中添加
ngMaterial
作为依赖项 像这样 - 在你的控制器中创建一个对象
(function () {
'use strict';
angular
.module('MyApp',['ngMaterial'])
.controller('AppCtrl', AppCtrl);
function AppCtrl ($scope) {
$scope.login = {
username: 'email@example.com',
passwd: ''
};
$scope.dologin = function(){
alert($scope.login.username);
alert(this.login.username);
}
}
})();
HTML
<div ng-app="MyApp">
<div ng-controller="AppCtrl">
<form name="loginForm" >
<md-tabs md-dynamic-height md-border-bottom>
<md-tab label="login">
<md-input-container>
<label>Username</label>
<input type="text" name="login_username" ng-model="login.username" required />
</md-input-container>
<md-input-container>
<label>Password</label>
<input type="password" name="login_passwd" ng-model="login.passwd" required />
</md-input-container>
<md-button class="md-button md-raised" ng-disabled="loginForm.$invalid" ng-click="dologin()">Login</md-button>
</md-tab>
<md-tab label="other tabs"></md-tab>
<md-tab label="other tabs"></md-tab>
<md-tab label="other tabs"></md-tab>
<md-tab label="other tabs"></md-tab>
</md-tabs>
</form>
</div>
</div>
说明:自定义指令有自己的范围,当你使用ng-model
时,变量属于默认范围,在你的情况下md-tabs
,要解决此问题,您可以在控制器中初始化 ng-model
。
不要忘记点。
您没有将模型附加到对象,因此失去了模型的范围。
而不是
ng-模型="login_username"
尝试使用
ng-模型="login.username"