指令参数在AngularJs中首次加载时未初始化
我做了一个下拉指令,我试图分配将参数传递给指令的方法,我将从控制器调用这些方法。 但在第一次加载时,我并没有在控制器中获得assign方法,但当我在第二次加载时(即在下拉更改事件中)分配它时,它工作正常 在第一次加载之后,如何在调用控制器中获取第一次加载指令时的方法 以下是指令:指令参数在AngularJs中首次加载时未初始化,angularjs,angularjs-directive,angularjs-controlleras,isolate-scope,Angularjs,Angularjs Directive,Angularjs Controlleras,Isolate Scope,我做了一个下拉指令,我试图分配将参数传递给指令的方法,我将从控制器调用这些方法。 但在第一次加载时,我并没有在控制器中获得assign方法,但当我在第二次加载时(即在下拉更改事件中)分配它时,它工作正常 在第一次加载之后,如何在调用控制器中获取第一次加载指令时的方法 以下是指令: "use strict"; myApp.directive("selectDirective", [function () { return { restrict: "E", t
"use strict";
myApp.directive("selectDirective", [function () {
return {
restrict: "E",
template: '<select class="form-control input-sm dropdown" data-ng-model="model.args.selectedItem" data-ng-options="item[model.args.displayField] for item in model.args.source" data-ng-change="model.itemChange(model.args.selectedItem)"><option value="">Select Any Item</option></select>',
scope: {
},
bindToController: { args: "=" },
controller: function () {
var self = this;
var initializeControl = function () {
if (self.args == undefined) {
self.args = {};
}
if (self.args.method == undefined) {
self.args.method = {};
}
if (self.args.isDisabled == undefined) {
self.args.isDisabled = false;
}
if (self.args.displayField == undefined) {
self.args.displayField = '';
//alert('Display Field is blank for dropdown control.')
}
if (self.args.valueField == undefined) {
self.args.valueField = '';
//alert('Value Field is blank for dropdown control.')
}
if (self.args.source == undefined) {
self.args.source = {};
}
if (self.args.hide == undefined) {
self.args.hide = false;
}
}
//here i'm assigning the methods in passing parameter
var assignMethod = function () {
self.args.method =
{
setEnable: function (args) {
self.args.isDisabled = !args;
},
setVisible: function (args) {
self.args.hide = !args;
},
getText: function () {
return self.args.selectedText;
},
getValue: function () {
return self.args.selectedValue;
},
setItem: function (item) {
debugger;
if (item != undefined) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
}
}
}
}
self.itemChange = function (item) {
debugger;
if (item != undefined) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
}
}
initializeControl();
assignMethod();
},
controllerAs: 'model'
}
}]);
查看我使用指令的位置:
<div class="cold-md-12" ng-controller="homeController as model">
<h1>Home Page</h1>
<select-directive args="model.argsParam"></select-directive>
<input type="button" value="Click" ng-click="model.clickMe()" />
</div>
那么,我如何才能获得在上传递参数中指定的方法呢
第一批指令
我已将控制器内容移动到指令和中的链接函数 它工作得很好,但我仍然不知道我以前的代码是如何工作的 没有按预期工作 指令代码:
'use strict';
var testApp = angular.module('TestApp', []);
testApp.directive('sampleDirective', ['$http', function () {
return {
restrict: "E",
scope: {},
bindToController: { args: '=' },
template: '<div class="row">' +
'<select class="form-control"' +
'data-ng-model="model.args.selectedItem"' +
'data-ng-options="item[model.args.displayField] for item in model.args.source"' +
'data-ng-change="model.itemChange(model.args.selectedItem)">' +
'<option value="">Select Any Item</option>' +
'</select>' +
'</div>',
link: function (scope, element, attrs) {
var self = scope.model;
debugger;
var initializeControl = function () {
if (self.args == undefined) {
self.args = {};
}
if (self.args.method == undefined) {
self.args.method = {};
}
if (self.args.isDisabled == undefined) {
self.args.isDisabled = false;
}
if (self.args.displayField == undefined) {
self.args.displayField = '';
alert('Display Field is blank for dropdown control.')
}
if (self.args.valueField == undefined) {
self.args.valueField = '';
alert('Value Field is blank for dropdown control.')
}
if (self.args.source == undefined) {
self.args.source = {};
}
if (self.args.hide == undefined) {
self.args.hide = false;
}
}
var assignMethod = function () {
self.args.method =
{
setEnable: function (args) {
self.args.isDisabled = !args;
},
setVisible: function (args) {
self.args.hide = !args;
},
getText: function () {
return self.args.selectedText;
},
getValue: function () {
return self.args.selectedValue;
},
setItem: function (item) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
}
};
}
self.itemChange = function (item) {
if (item != undefined) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
}
}
initializeControl();
assignMethod();
},
controller: function () {
},
controllerAs: 'model'
}
}]);
“严格使用”;
var testApp=angular.module('testApp',[]);
testApp.directive('sampleDirective',['$http',function(){
返回{
限制:“E”,
作用域:{},
bindToController:{args:'='},
模板:“”+
'' +
'选择任何项目'+
'' +
'',
链接:函数(范围、元素、属性){
var self=scope.model;
调试器;
var initializeControl=函数(){
if(self.args==未定义){
self.args={};
}
if(self.args.method==未定义){
self.args.method={};
}
if(self.args.isDisabled==未定义){
self.args.isDisabled=false;
}
if(self.args.displayField==未定义){
self.args.displayField='';
警报('下拉控件的显示字段为空')
}
if(self.args.valueField==未定义){
self.args.valueField='';
警报('下拉控件的值字段为空')
}
if(self.args.source==未定义){
self.args.source={};
}
if(self.args.hide==未定义){
self.args.hide=false;
}
}
var赋值方法=函数(){
self.args.method=
{
setEnable:函数(参数){
self.args.isDisabled=!args;
},
setVisible:函数(args){
self.args.hide=!args;
},
getText:function(){
返回self.args.selectedText;
},
getValue:函数(){
返回self.args.selectedValue;
},
setItem:函数(项){
var index=self.args.source.indexOf(项目);
self.args.selectext=item[self.args.displayField];
self.args.selectecValue=item[self.args.valueField];
self.args.selectedItem=项目;
self.args.selectedIndex=索引;
}
};
}
self.itemChange=功能(项目){
如果(项目!=未定义){
var index=self.args.source.indexOf(项目);
self.args.selectext=item[self.args.displayField];
self.args.selectecValue=item[self.args.valueField];
self.args.selectedItem=项目;
self.args.selectedIndex=索引;
}
}
初始化控件();
赋值方法();
},
控制器:函数(){
},
controllerAs:“模型”
}
}]);
self.itemChange = function (item) {
debugger;
if (item != undefined) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
// here i'm assigning these method on change event then it's working fine after changing the value otherwise no success
assignMethod();
}
}
'use strict';
var testApp = angular.module('TestApp', []);
testApp.directive('sampleDirective', ['$http', function () {
return {
restrict: "E",
scope: {},
bindToController: { args: '=' },
template: '<div class="row">' +
'<select class="form-control"' +
'data-ng-model="model.args.selectedItem"' +
'data-ng-options="item[model.args.displayField] for item in model.args.source"' +
'data-ng-change="model.itemChange(model.args.selectedItem)">' +
'<option value="">Select Any Item</option>' +
'</select>' +
'</div>',
link: function (scope, element, attrs) {
var self = scope.model;
debugger;
var initializeControl = function () {
if (self.args == undefined) {
self.args = {};
}
if (self.args.method == undefined) {
self.args.method = {};
}
if (self.args.isDisabled == undefined) {
self.args.isDisabled = false;
}
if (self.args.displayField == undefined) {
self.args.displayField = '';
alert('Display Field is blank for dropdown control.')
}
if (self.args.valueField == undefined) {
self.args.valueField = '';
alert('Value Field is blank for dropdown control.')
}
if (self.args.source == undefined) {
self.args.source = {};
}
if (self.args.hide == undefined) {
self.args.hide = false;
}
}
var assignMethod = function () {
self.args.method =
{
setEnable: function (args) {
self.args.isDisabled = !args;
},
setVisible: function (args) {
self.args.hide = !args;
},
getText: function () {
return self.args.selectedText;
},
getValue: function () {
return self.args.selectedValue;
},
setItem: function (item) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
}
};
}
self.itemChange = function (item) {
if (item != undefined) {
var index = self.args.source.indexOf(item);
self.args.selectecText = item[self.args.displayField];
self.args.selectecValue = item[self.args.valueField];
self.args.selectedItem = item;
self.args.selectedIndex = index;
}
}
initializeControl();
assignMethod();
},
controller: function () {
},
controllerAs: 'model'
}
}]);