首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >一次加载一次功能-角度

一次加载一次功能-角度
EN

Stack Overflow用户
提问于 2016-09-14 01:19:46
回答 1查看 307关注 0票数 0

在页面上显示元素后,我希望有一个角函数触发。

元素是SPA的一部分,在SPA中,所显示的内容由大量事件控制(因此,在页面加载时进行操作是行不通的)。此元素的父元素(因此元素本身)的显示由一个ng-if控制,它调用一个单独的函数。由于父函数直到该函数返回才会显示,因此在该函数中没有逻辑位置可以包含更改该子元素的逻辑,而且由于由于ng-if而按角调用,因此在返回前一个函数后,没有父函数将代码放在其中。

我目前正在实现这一目标,方法是将包含我的逻辑的函数放入其中,该函数总是在ng中返回true --如果在元素的子元素上具有正确、有用的ng--如果在其子元素上,这将在元素具有显示选项后立即运行。虽然这样做确实有效,但我觉得这是一个非常棘手的问题解决方案。是否有一种更“适当”的方法来实现这一点?

HTML的片段(为了问题而更改了函数名称):

代码语言:javascript
运行
复制
<div data-ng-if="shouldTheButtonDisplay()">
    <a class="btn"
       data-ng-click="irrelevantToQuestion()"
       data-ng-if="functionToPerformOnceElementLoaded()"
       href="#">
        button text
    </a>
</div>

JS的片段(细节因与问题无关而改变):

代码语言:javascript
运行
复制
$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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-09-15 07:18:44

我会这样做的:

代码语言:javascript
运行
复制
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);
        }
    };
}
代码语言:javascript
运行
复制
.btn {
  background-color: red;
}
.btn.green {
  background-color: green;
}
代码语言:javascript
运行
复制
<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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39481160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档