Angular 控制器中的作用域
Angular Scope in a controller
"Angular version": "1.3.8",
我有以下代码
控制器正在像这样传送到页面
'use strict';
/**
* @ngdoc overview
* @name testApp
* @description
* # testApp
*
* Main module of the application.
*/
angular
.module('testApp', [
'ngAnimate',
'ngCookies',
'ngMessages',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/about', {
templateUrl: 'views/about.html',
controller: 'AboutCtrl'
})
.when('/test', {
templateUrl: 'views/test.html',
controller: 'MyCtrl'
})
.otherwise({
redirectTo: '/'
});
});
在 test.html 文件中
<div>
<input ng-model="expr" type="text" placeholder="Enter an expression" />
<h2>{{parsedValue}}</h2>
</div>
在 controller.js 文件中
'use strict';
angular.module('testApp').controller('MyCtrl', function($scope, $parse) {
$scope.$watch('expr', function(newVal, oldVal, scope) {
if (newVal !== oldVal) {
// Let's set up our parseFun with the expression
var parseFun = $parse(newVal);
// Get the value of the parsed expression
$scope.parsedValue = parseFun(scope);
}
});
});
- 当运行上面的代码时,绑定变量
{{parsedValue}}
没有被更新。
- 调试代码显示
$scope.parsedValue
在赋值后未定义。
- 为什么创建
parseFun
的所有礼仪(我知道它可能是一个保留所有值的闭包)但它不起作用
有人可以阐明正在发生的事情吗....这里还有另一个类似的问题,但我认为该问题由于提出问题的方式而存在一些问题。
解析和引用范围上的值有效:http://plnkr.co/edit/Ch2WFP3XGRvCySFh4UXz?p=preview
由于经常调用 change 函数,代码循环遍历了几个确实在 $scope
上未定义的变量名称。实际上,在给定的示例中,范围内的所有值都是 undefined
,因为没有定义任何变量,只有原始表达式(例如 1 + 2
或 "test"
)可以工作。在链接示例中,可以在输入的表达式中使用变量 x
。
然而,这可能不是您想要的。
为了能够将用户的输入复制为 string
,您不需要 $parse
表达式。
相反,只有以下内容会起作用:
<input ng-model="expr" type="text" placeholder="Enter some text">
<h2>{{expr}}</h2>
无需控制器上的任何代码。
"Angular version": "1.3.8",
我有以下代码 控制器正在像这样传送到页面
'use strict';
/**
* @ngdoc overview
* @name testApp
* @description
* # testApp
*
* Main module of the application.
*/
angular
.module('testApp', [
'ngAnimate',
'ngCookies',
'ngMessages',
'ngResource',
'ngRoute',
'ngSanitize',
'ngTouch'
])
.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'views/main.html',
controller: 'MainCtrl'
})
.when('/about', {
templateUrl: 'views/about.html',
controller: 'AboutCtrl'
})
.when('/test', {
templateUrl: 'views/test.html',
controller: 'MyCtrl'
})
.otherwise({
redirectTo: '/'
});
});
在 test.html 文件中
<div>
<input ng-model="expr" type="text" placeholder="Enter an expression" />
<h2>{{parsedValue}}</h2>
</div>
在 controller.js 文件中
'use strict';
angular.module('testApp').controller('MyCtrl', function($scope, $parse) {
$scope.$watch('expr', function(newVal, oldVal, scope) {
if (newVal !== oldVal) {
// Let's set up our parseFun with the expression
var parseFun = $parse(newVal);
// Get the value of the parsed expression
$scope.parsedValue = parseFun(scope);
}
});
});
- 当运行上面的代码时,绑定变量
{{parsedValue}}
没有被更新。 - 调试代码显示
$scope.parsedValue
在赋值后未定义。 - 为什么创建
parseFun
的所有礼仪(我知道它可能是一个保留所有值的闭包)但它不起作用
有人可以阐明正在发生的事情吗....这里还有另一个类似的问题,但我认为该问题由于提出问题的方式而存在一些问题。
解析和引用范围上的值有效:http://plnkr.co/edit/Ch2WFP3XGRvCySFh4UXz?p=preview
由于经常调用 change 函数,代码循环遍历了几个确实在 $scope
上未定义的变量名称。实际上,在给定的示例中,范围内的所有值都是 undefined
,因为没有定义任何变量,只有原始表达式(例如 1 + 2
或 "test"
)可以工作。在链接示例中,可以在输入的表达式中使用变量 x
。
然而,这可能不是您想要的。
为了能够将用户的输入复制为 string
,您不需要 $parse
表达式。
相反,只有以下内容会起作用:
<input ng-model="expr" type="text" placeholder="Enter some text">
<h2>{{expr}}</h2>
无需控制器上的任何代码。