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);
    }
  });
});
  1. 当运行上面的代码时,绑定变量 {{parsedValue}} 没有被更新。
  2. 调试代码显示 $scope.parsedValue 在赋值后未定义。
  3. 为什么创建 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>

无需控制器上的任何代码。