指令参数在AngularJs中首次加载时未初始化

指令参数在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

我做了一个下拉指令,我试图分配将参数传递给指令的方法,我将从控制器调用这些方法。 但在第一次加载时,我并没有在控制器中获得assign方法,但当我在第二次加载时(即在下拉更改事件中)分配它时,它工作正常

在第一次加载之后,如何在调用控制器中获取第一次加载指令时的方法

以下是指令:

"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'
    }
}]);