角のアプリケーションで作業中 親コントローラにdireciveメソッドを呼び出す際に問題が発生しました。 問題はプロファイルコントローラでloginディレクティブを使用していることです。 プロファイルコントローラのスコープからlogin direciveのメソッドを呼び出したいとします。親のコントローラで角ディレクティブのスコープにアクセスできない
最初の問題は、$ scope.loginがここでは定義されていないため、コントローラー で$ scope.login.openLogin(false)を使用してloginディレクティブのメソッドを呼び出すことができません。 しかし、同じコントローラ$ scope.login.openLogin(false)は、Ajax呼び出しの成功またはエラーメソッドのようなコールバックイベントでアクセス可能です。しかし、私はまだいくつかの時間は未定義と与えられているか分からないし、いくつかの時間は正常に動作します。これは私の主な問題は、いくつかの時間$ scope.loginは、
最初の問題は、プロファイルコントローラで$ scope.vmまたは$ scope.loginを取得できないということです。代わりに$ sope.vm.getData()のような呼び出しメソッドを呼び出せません。代わりにthis.getDataのように呼び出す必要があります).Why this.getData())アクセスが、$ scope.vm.getData(それが続いてヌル
を与えるアクセス
LoginDirective.cs
//Login diretive
angular.module('EmailApp')
.directive('login', function LoginDrctv() {
'use strict';
return {
restrict: 'EA',
replace: true,
scope: false,
templateUrl: "js/directives/template/login.tmpl.html",
controllerAs: 'login',
//bindToController: true,
controller: function (LoginFactory, $scope, $rootScope, $location) {
//THis method is to be call from parent controller (Profile Controller)
this.openLogin = function (IsmakeCall) {
debugger;
this.loginOperation = "Login";
this.makeCall = IsmakeCall; //true or false
// $rootScope.islogin = true;
$scope.vm.mainPage = 'login';
}
},
link: function (scope, element, attrs, ctrl) {
/*
by convention we do not $ prefix arguments to the link function
this is to be explicit that they have a fixed order
*/
}
}
});
プロフィールログインディレクティブのコードですされていませんコントローラ(Profile.Js)
一般的な親コントローラでangular.module('EmailApp')
.controller('ProfileCtrl', ['$rootScope', '$routeParams', 'DetailFactory', '$scope', '$location',
function ProfileCtrl($rootScope, $routeParams, DetailFactory, $scope, $location) {
'use strict';
this.loading = true;
this.mainPage = 'detail';
this.back = function() {
$location.path('home');
}
// $scope.login.openLogin(false) this method is not accessible
//here but in call back function is works like below
this.getData = function() {
debugger;
this.loading = true;
DetailFactory.getDetailProfile().then(function (resp) {
$scope.vm.loading = false;
$scope.vm.userDetails = resp.data;
$scope.vm.userId = resp.data.appUser.UserID
}, function (err) {
$scope.vm.loading = false;
if (err.status == 401) {
//Call method of login directive .It get called some
//times but sometime $scope.login gives undefined
$scope.login.openLogin(false);
}
});
}
this.getData();
}]);
profile.html
angular.module('EmailApp', [
'ngRoute',
'ngSanitize',
'angularFileUpload'
]).config(function ($routeProvider) {
'use strict';
$routeProvider
.when('/profile', {
templateUrl: 'view/profile.html?v=' + Math.random(),
controller: 'ProfileCtrl',
controllerAs: 'vm'
})
.when('/home', {
templateUrl: 'view/PrivacyPolicy.html?v=' + Math.random(),
controller: 'PrivacyCtrl',
controllerAs: 'vm'
})
.otherwise({
redirectTo: '/home'
});
}).run(function ($rootScope, $location) {
});
を行い、いくつかのコードです –