控制器中的角度范围

时间:2015-01-04 21:21:05

标签: angularjs controller angularjs-scope

" Angular版本":" 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(我知道它可能是一个关闭以保留所有值)但它不起作用
  4. 有人可以对发生的事情发出一些启示......这里还有另一个类似的问题,但我认为这个问题因为被问及的方式而存在一些问题。

1 个答案:

答案 0 :(得分:0)

解析和引用范围的值有效:http://plnkr.co/edit/Ch2WFP3XGRvCySFh4UXz?p=preview

由于经常调用更改函数,因此代码会循环遍历几个变量名称,这些名称确实在$scope上未定义。实际上,在给定的示例中,范围内的所有值都将为undefined,因为没有定义任何变量,只有原始表达式(例如1 + 2"test")才有效。在链接示例中,变量x可用于输入的表达式。

但是,这可能不是你想要的。

为了能够将用户的输入复制为string,您不需要$parse表达式。 相反,只需以下内容即可:

<input ng-model="expr" type="text" placeholder="Enter some text">
<h2>{{expr}}</h2>

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