指令范围值(initialValue和title)在我的控制器函数中是undefined
- counterController。如果我在{{ counterCtrl.initialValue }}
中定义app_counter.directive.html
,在undefined
函数中定义counterController
,则会打印initialValue。
app_counter.directive.js
'use strict';
module.exports = function (app) {
app.directive('appCounter', appCounter)
};
function appCounter() {
let directive = {
restrict: 'EA',
template: require('./app_counter.directive.html'),
scope: {
initialValue: '=',
title: '@'
},
controller: counterController,
controllerAs: 'counterCtrl',
bindToController: true
};
return directive;
}
function counterController() {
let vm = this;
vm.counter = vm.initialValue;
vm.increment = increment;
vm.decrement = decrement;
function increment() {
vm.counter += 1;
}
function decrement() {
vm.counter -= 1;
}
}
app.js
'use strict';
const angular = require('angular');
const app = angular.module('app', []);
require('./app_counter/app_counter.directive')(app);
app_counter.directive.html
<div class="counter">
<div>Current value {{counterCtrl.title}}: {{ counterCtrl.counter }}</div>
<button type="button" ng-click="counterCtrl.decrement()">Decrement</button>
<button type="button" ng-click="counterCtrl.increment()">Increment</button>
</div>
的index.html
<div id="app" ng-app="app">
<app-counter title="hello" initial-value="10"></app-counter>
</div>
答案 0 :(得分:2)
您需要在控制器内部使用$scope
(原样)访问它们,而不是直接使用控制器实例对象(this
)。
function counterController($scope) {
let vm = this;
vm.counter = $scope.initialValue;
vm.increment = increment;
vm.decrement = decrement;
function increment() {
vm.counter += 1;
}
function decrement() {
vm.counter -= 1;
}
}
<强>&GT;&GT; Demo fiddle 强>
您可以使用自AngularJS v1.3以来可用的bindToController
来实现相同目标:
myApp.directive('myDirective', function () {
return {
restrict: 'A',
scope: true,
controllerAs: 'counterCtrl',
bindToController: {
initialValue: '='
},
controller: function () {
this.$onInit = function () {
let vm = this;
vm.counter = vm.initialValue;
vm.increment = increment;
vm.decrement = decrement;
function increment() {
vm.counter += 1;
}
function decrement() {
vm.counter -= 1;
}
};
}
}
});
<强>&GT;&GT; Demo fiddle 强>