【发布时间】:2015-04-11 02:57:44
【问题描述】:
这行得通:
input-form.html
<form name="inputForm" ng-submit="inputForm.$valid && inputCtrl.emitData()" novalidate>
<textarea name="topic1Data" ng-model="inputCtrl.inputValues.topic1Data" rows="10" cols="30" required></textarea>
<button type="submit" class="btn btn-info btn-lg" ng-disabled="!inputForm.$valid">Compare</button>
</form>
inputForm.js
"use strict";
(function() {
var inputForm = angular.module('input-form', []);
inputForm.directive('inputForm', function() {
return {
restrict: 'E',
templateUrl: 'input-form.html',
scope: {data: "="},
controllerAs: 'inputCtrl',
bindToController: true,
controller: function() {
var inputCtrl = this;
inputCtrl.inputValues = {topic1Data: 123456789};
inputCtrl.emitData = function() {
inputCtrl.data = inputCtrl.inputValues.topic1Data;
};
}
};
});
})();
来源:https://stackoverflow.com/a/29558554/2848676
这不起作用:
input-form.html
<form name="inputForm" ng-controller="InputController as inputCtrl" ng-submit="inputForm.$valid && inputCtrl.emitData()" novalidate>
<textarea name="topic1Data" ng-model="inputCtrl.inputValues.topic1Data" rows="10" cols="30" required></textarea>
<button type="submit" class="btn btn-info btn-lg" ng-disabled="!inputForm.$valid">Compare</button>
</form>
inputForm.js
"use strict";
(function() {
var inputForm = angular.module('input-form', []);
inputForm.directive('inputForm', function() {
return {
restrict: 'E',
templateUrl: 'input-form.html',
scope: {data: "="},
bindToController: true
};
});
inputForm.controller('InputController', function(){
var inputCtrl = this;
inputCtrl.inputValues = {topic1Data: 123456789};
inputCtrl.emitData = function() {
inputCtrl.data = inputCtrl.inputValues.topic1Data;
};
});
})();
我找到了一个article by Pascal Precht,它似乎说解决方案是bindToController,但我正在使用bindToController,但它仍然不起作用。
为什么 JavaScript 中的 controllerAs 有效,而 HTML 中的 ng-controller=...as... 无效?
【问题讨论】:
-
据我了解 bindToController 仅适用于 controllerAs - github.com/johnpapa/angular-styleguide#style-y076
-
究竟是什么不起作用?我试过你的 plunkr,它在 textarea 中显示 123456789。您预计会发生什么,以及会发生什么?
-
@JBNizet 抱歉,我把错误的 Plunker 链接放错了版本。我已经在问题中更正了它,但为了您的方便,这里是:plnkr.co/edit/jJr649vljMyqqZx8P9Um?p=preview。预期行为:给定在文本区域中输入的数字,当用户按下比较按钮时,该数字应显示为标签。它适用于 JS 中的
controllerAs,但不适用于 HTML 中的... as ...。
标签: angularjs angularjs-directive