javascript-将$scope.$on名称参数作为AngularJS指令的属性传递
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-将$scope.$on名称参数作为AngularJS指令的属性传递,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3073字,纯文字阅读大概需要5分钟。
内容图文
我正在尝试创建一个指令,该指令允许我传递属性字符串,然后在使用$scope.$on订阅事件时将其用作“名称”参数.本质上,一系列事件是这样的:
>例如,在另一个控制器中,使用称为“ validationResultMessage”的$rootScope.$broadcast广播对象.
>我有一个指令,该指令具有一个名为“ subscription”的属性,我将字符串“ validationResultMessage”传递给该指令.
>该指令将“ subscription”属性的值传递到其作用域,并使用“ $scope.$on”对其进行订阅.
问题是,在评估所有内容时,属性值似乎为“ undefined”,因此当我尝试使用$scope.$on进行订阅时,它实际上使我订阅了“ undefined”,而不是“ validationResultMessage”
这是我的指令:
app.directive('detailPane', function () {
return {
restrict: 'E',
scope: {
selectedItem: '=',
subscription: '@',
},
templateUrl: 'app/templates/DetailPane.html', //I'm also worried that this is causing my controller to get instantiated twice
controller: 'DetailPaneController'
};
});
然后我这样使用:
<td class="sidebar" ng-controller="DetailPaneController" ng-style="{ 'display': sidebarDisplay }">
<detail-pane
selected-item='validationResult'
subscription='validationResultMessage'/>
</td>
以及我要将此属性传递给的控制器:
app.controller('DetailPaneController', ['$scope', '$http', 'dataService', 'toastr', '$uibModal', '$rootScope', '$attrs', function ($scope, $http, dataService, toastr, $uibModal, $rootScope, $attrs) {
$scope.fetching = [];
$scope.validationResult = null;
$scope.sidebarDisplay = 'block';
console.log('subscription is ', $scope.subscription);
var thisSubscription = $scope.subscription;
//if I hardcode the param as 'validationResultMessage', this works
$scope.$on($scope.subscription, function (event, arg) {
$scope.validationResult = arg;
});
}]);
解决方法:
考虑到这是一些代码,我将发布我的答案1,请告诉我这是否是必需的结果,因此我可以提供评论.您应该能够运行提供的代码段.
var app = angular.module('myApp', []);
app.directive('detailPane', function() {
return {
restrict: 'E',
transclude: false,
scope: {
selectedItem: '=',
subscription: '@'
},
link: function(scope, elem, attr) {
scope.$on(scope.subscription, function(e, data) {
scope.selectedItem = data.result;
elem.text(data.message);
});
},
};
});
app.controller('DetailPaneController', function($scope) {
$scope.validationResult1 = "";
$scope.validationResult2 = "";
});
app.controller('SecondController', function($rootScope, $scope, $timeout) {
$timeout(function() {
$rootScope.$broadcast('validationResultMessage1', {
message: 'You fail!',
result: 'Result from 1st fail'
})
}, 2000);
$timeout(function() {
$rootScope.$broadcast('validationResultMessage2', {
message: 'You also fail 2!',
result: 'Result from 2nd fail'
})
}, 4000);
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<body ng-app='myApp'>
<div ng-controller="DetailPaneController">
<detail-pane class='hello' selected-item='validationResult1' subscription='validationResultMessage1'></detail-pane>
<br/>
<detail-pane class='hello' selected-item='validationResult2' subscription='validationResultMessage2'></detail-pane>
<hr/>
<span>{{validationResult1}}</span>
<br/>
<span>{{validationResult2}}</span>
</div>
<div ng-controller="SecondController">
</div>
</body>
内容总结
以上是互联网集市为您收集整理的javascript-将$scope.$on名称参数作为AngularJS指令的属性传递全部内容,希望文章能够帮你解决javascript-将$scope.$on名称参数作为AngularJS指令的属性传递所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。