2014-09-04 59 views
1

我无法让getterSetter在ng-model指令中工作。 请看看这个plunker:http://plnkr.co/edit/Tx0nyvvbuKqf1ZpsRTPu?p=preview如何在具有隔离范围的角度指令中使用getterSetter?

如果您使用未注释的模板,该示例的行为就好像它不知道getSet()是它应该调用的函数。

如果您取消注释其他模板(并注释掉第一个模板),则输入会按预期连接到{{}}。

为什么getterSetter无法正常工作?

感谢您的帮助!

这是代码:

的javascript:

var app = angular.module('app', []) 

.controller('ctrl', ['$scope', function($scope) { 
    $scope.something = "hahaha"; 
}]) 

/* 
* attributes: 
* - value - a variable to store the input value in 
* 
*/ 
.directive('inputNumber', ['$log', function($log) { 

    var linker = function(scope, element, attrs) { 
    $log.info('inputNumber linker called! value = "' + scope.value + '".'); 

    scope.getSet = function(newValue) { 
     if(angular.isDefined(newValue)) { 
     scope.value = newValue; 
     } 
     return scope.value; 
    } 

    } 
    return { 
      restrict : 'E', 
//   template: '<p>Say something! {{ value }}</p><input ng-model="value" ng-model-options="{ getterSetter: false }"></input>', 
      template: '<p>Say something! {{ getSet() }}</p><input ng-model="getSet" ng-model-options="{ getterSetter: true }"></input>', 
      link: linker, 
      scope: { 
      value: '=' 
      } 
     }; 
}]) 

HTML:

<!DOCTYPE html> 
<html> 
    <head> 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.15/angular.min.js"></script> 
    <link rel="stylesheet" href="style.css"> 
    <script src="script.js"></script> 
    </head> 

    <body> 
    <h1>Hello Plunker!</h1> 
    <div ng-app="app" ng-controller="ctrl"> 
    <input-number value="something" ></input-number> 
    </div> 
    </body> 

</html> 

回答

3

这里的问题是ngModelOptions只在角1.3,但您正在使用1.2角。X。尝试修改脚本标记以使用1.3.0-rc.0/angular.min.js,它应该可以工作。

0

您的指令模板应该设置为模型(在本例中为'value')。

template: '<p>Say something! {{ getSet() }}</p><input ng-model="value" 
     ng-model-options="{ getterSetter: true }"></input>' 

Demo Plunker

+1

这是欺骗,因为这样一来,GETSET功能只用于获得的价值,而不是将其设置,这意味着它不能检查它,改变它,或者引起副作用。实际上,如果你这样做,ng-model-options =“...”根本就没有必要。 – eltomito 2014-09-04 18:36:13

相关问题