angularjs - 我如何从外部函数调用控制器中的内部函数?在使用 angularjs 获取 Typeerror 进行 typeahead 工作时:
问题描述
在从 templateResolver() 调用Ctrl()函数中的内部函数时,在 TemplateResolver 中我像这样调用----> md-search-text-change="ctrl.searchTextChange(ctrl.searchText)" 建议我为什么我收到错误或如何从templateresolver()调用该内部函数
请通过代码:
angular
.module('app.components')
.directive('dirInput', dirInput);
function dirInput() {
return {
restrict: "E",
scope: {
inputConfig: '<',
model: '=ngModel'
},
require: '^InputBar',
template: templateResolver(),
controller: ctrl
};
// For context
function ctrl($timeout,$scope, $q, $log) {
var self = this;
self.simulateQuery = false;
self.isDisabled = false;
// list of `state` value/display objects
self.states = loadAll();
self.querySearch = querySearch;
self.selectedItemChange = selectedItemChange;
self.searchTextChange = searchTextChange;
self.newState = newState;
function newState(state) {
alert("Sorry! You'll need to create a Constitution for " + state + " first!");
}
// ******************************
// Internal methods
// ******************************
function querySearch (query) {
var results = query ? self.states.filter( createFilterFor(query) ) : self.states,
deferred;
if (self.simulateQuery) {
deferred = $q.defer();
$timeout(function () { deferred.resolve( results ); }, Math.random() * 1000, false);
return deferred.promise;
} else {
return results;
}
}
function searchTextChange(text) {
alert("text "+text)
$log.info('Text changed to ' + text);
}
function selectedItemChange(item) {
$log.info('Item changed to ' + JSON.stringify(item));
}
function loadAll()
{ var allStates = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\
Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\
Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\
Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\
North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\
South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\
Wisconsin, Wyoming';
return allStates.split(/, +/g).map( function (state) {
return {
value: state.toLowerCase(),
display: state
};
});
}
/**
* Create filter function for a query string
*/
function createFilterFor(query) {
var lowercaseQuery = query.toLowerCase();
return function filterFn(state) {
return (state.value.indexOf(lowercaseQuery) === 0);
};
}
}
function templateResolver() {
var templateString =
' <md-input-container class="md-accent">\n' +
' <label>{{ inputConfig.label }}</label>\n' +
' <input ng-if="inputConfig.type === \'text\'" name="{{inputConfig.id}}" ng-model="$parent.model" ng-blur="onBlur($event)" ng-required="{{inputConfig.required}}">\n' +
' <md-datepicker ng-if="inputConfig.type === \'date\'" ng-model="$parent.model" md-hide-icons="calendar" ng-required="{{inputConfig.required}}"></md-datepicker>\n' +
' <md-autocomplete ng-if="inputConfig.type === \'auto-complete\'" name="{{inputConfig.id}}" ng-required="{{inputConfig.required}}" ng-disabled="ctrl.isDisabled" md-no-cache="ctrl.noCache" md-selected-item="ctrl.selectedItem" md-search-text-change="ctrl.searchTextChange(ctrl.searchText)" md-search-text="ctrl.searchText" md-selected-item-change="ctrl.selectedItemChange(item)" md-items="item in ctrl.querySearch(ctrl.searchText)" md-item-text="item.display" md-min-length="0" ><md-item-template> <span md-highlight-text="ctrl.searchText" md-highlight-flags="^i">{{item.display}}</span></md-item-template></md-autocomplete> \n'+
' </md-input-container>';
return templateString;
}
}
解决方案
推荐阅读
- shared-objects - 共享对象 - 获取远程
- sql-server - 如何从表一中选择表二中的所有记录
- angular - 错误类型错误:无法设置未定义的属性“用户名”
- localhost - 为什么我在 Postman 中收到“无法找到名为 localhost 的服务器”错误?
- c# - 当玩家在我的井字游戏/连线四人游戏中使用重置板功能时,游戏将每一次按钮点击算作胜利?
- android - 如何修复 setVideoSource 失败
- c++ - c ++宏导入基本模板类的所有名称
- javascript - 复选框单击功能不起作用角度 4
- c# - 如何用数据填充这样的列表框
- c# - Razor Pages 中具有双值的输入字段的本地化