在页面上显示元素后,我希望有一个角函数触发。
元素是SPA的一部分,在SPA中,所显示的内容由大量事件控制(因此,在页面加载时进行操作是行不通的)。此元素的父元素(因此元素本身)的显示由一个ng-if控制,它调用一个单独的函数。由于父函数直到该函数返回才会显示,因此在该函数中没有逻辑位置可以包含更改该子元素的逻辑,而且由于由于ng-if而按角调用,因此在返回前一个函数后,没有父函数将代码放在其中。
我目前正在实现这一目标,方法是将包含我的逻辑的函数放入其中,该函数总是在ng中返回true --如果在元素的子元素上具有正确、有用的ng--如果在其子元素上,这将在元素具有显示选项后立即运行。虽然这样做确实有效,但我觉得这是一个非常棘手的问题解决方案。是否有一种更“适当”的方法来实现这一点?
HTML的片段(为了问题而更改了函数名称):
<div data-ng-if="shouldTheButtonDisplay()">
<a class="btn"
data-ng-click="irrelevantToQuestion()"
data-ng-if="functionToPerformOnceElementLoaded()"
href="#">
button text
</a>
</div>
JS的片段(细节因与问题无关而改变):
$scope.shouldTheButtonDisplay() {
return booleanThatIsRelevantInContext;
}
$scope.functionToPerformOnceElementLoaded = function() {
// Edit state of button (technically an anchor)
var firstRowButton = document.querySelector("a.btn");
firstRowButton.style.background = "green";
return true;
}
发布于 2016-09-15 07:18:44
我会这样做的:
angular
.module('yourModuleName', [])
.controller('yourControllerName', yourControllerNameCtrl)
.directive('yourDirectiveName', yourDirectiveNameDirective);
yourControllerNameCtrl.$inject = ['$scope'];
function yourControllerNameCtrl($scope)
{
$scope.message = 'In controller';
$scope.irrelevantToQuestion = function() {};
}
function yourDirectiveNameDirective()
{
function doSomethingElse(scope)
{
scope.message = 'In directive';
}
return {
restrict: 'A',
scope: 'falsy',
link: function(scope, element)
{
element.find('a').addClass('green');
doSomethingElse(scope);
}
};
}
.btn {
background-color: red;
}
.btn.green {
background-color: green;
}
<html ng-app="yourModuleName">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.js"></script>
</head>
<body ng-controller="yourControllerName">
<div>{{ message }}</div>
<div your-directive-name>
<a class="btn"
data-ng-click="irrelevantToQuestion()"
href="#">
button text
</a>
</div>
</body>
</html>
https://stackoverflow.com/questions/39481160
复制相似问题