Ng-click 第一次不起作用 - 但之后起作用

Ng-click does not work first time - but works afterwards

我有两个states/views叫bookmark和bookmarked。 书签视图有一个按钮,它将 url 传递给一个名为 setURL 的函数。此函数设置书签视图上 iframe 的 src。

<ion-view view-title="Bookmarks">
    <ion-content>
        <button class="button" ui-sref="myLearning.bookmarked" ng-click="setURL('SOMEURL')">Bookmark</button>
    </ion-content>
    <div class="bar bar-footer bar-assertive"></div>
</ion-view>

已添加书签的视图有一个 iframe,其 src 由上一个视图上的按钮设置。 src 当前设置为空,因为我永远不会导航到此视图,除非我单击将传递 url.

的书签按钮
<ion-view view-title="Bookmarked">
    <ion-content>
        <iframe id="learningFrame" src="" width="100%" height="100%" seamless></iframe>
    </ion-content>
</ion-view>

当我 运行 应用程序导航到书签视图并单击书签按钮时,它导航到书签视图但它在 iframe (src="") 中显示空白页面而不是使用从函数传入的 url 。但是,如果我从这个空白页面导航到书签视图并第二次单击书签按钮,则会加载实际的 url。

为什么视图在第一次加载时不使用我通过 setURL 传入的 url?

函数如下所示:

.controller('bookmarkCtrl', function($scope){
    $scope.setURL = function(currURL){
        document.getElementById('learningFrame').src = currURL;
    };
});

不知道为什么第一次不行... 任何帮助将不胜感激,谢谢。

您可以简单地使用 ng-src 而不是从控制器进行 DOM 操作,这将使 {{}} 决定 src 属性值。

标记

<ion-view view-title="Bookmarked">
    <ion-content>
        <iframe id="learningFrame" ng-src="{{learningFrameUrl}}" width="100%" height="100%" seamless></iframe>
    </ion-content>
</ion-view>

控制器

.controller('bookmarkCtrl', function($scope){
    $scope.setURL = function(currURL){
        $scope.learningFrameUrl = currURL;
    };
});

更新

如果您想在控制器之间共享数据,那么您可以使用 service/factory 组件。然后你可以通过将它注入你的 controller/directive 任何你想使用它的地方来使用它。

服务

app.service('dataService', function(){
   this.learningFrame = {
      Url: ''
   };
   //..other stuff here..//
});

控制器

.controller('bookmarkCtrl', function($scope, dataService){
    $scope.setURL = function(currURL){
        //this can be available in other controller
        //wherever you take value from learningFrameUrl
        $scope.learningFrame = dataService.learningFrame;
        dataService.learningFrame.Url = currURL; 
    };
});