2015-05-18 91 views
3

我的问题涉及如何在AngularJS应用程序中的ngView内调用模板中使用AngularJS directivesngView内部的模板调用不支持角度指令stackoverflow

定义:
该应用程序是单页,所以加载包含在与所述NG-视图属性的DOM div元素(模板URL)一个index.html。

Main Page(的index.html) :

<html data-ng-app="App" data-ng-controller="AppCtrl"> 
    <head> 
    <title>Angular App</title> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script> 
    <script src="js/app.js"></script> 
    </head> 
<body> 
<!-- primary nav --> 
<a href="#/page1">Page 1</a> 
<a href="#/page2">Page 2</a> 
<a href="#/page3">Page 3</a> 

<!-- display the view --> 
<div ng-view> 
</div> 
</body> 
</html> 

app.js:

angular.module('App', []) 

.controller('AppCtrl', function($rootScope, appLoading) { 
    $rootScope.topScope = $rootScope; 
    $rootScope.$on('$routeChangeStart', function() { 
     appLoading.loading(); 
    }); 
    }) 

.config(function($routeProvider) { 
    $routeProvider.when('/page1', { 
     controller : 'Page1Ctrl', 
     templateUrl : 'page1.html' 
    }) 
    .when('/page2', { 
     controller : 'Page2Ctrl', 
     templateUrl : 'page2.html' 
    }) 
    .when('/page3', { 
     controller : 'Page3Ctrl', 
     templateUrl : 'page3.html' 
    }) 
    .otherwise({ 
     redirectTo: '/home' 
    }); 
    }) 

page1.html:

<div class="form"> 
<form class="login-profile" method="post" action="" name="editfrm"> 
<input type="text" name="email" value="" id="txtemail" data-ng-model="email" required> 
<input type="password" name="password" value="" id="txtpassword" data-ng-model="password" required> 
<input type="button" value="Save" name="submit"> 
</form> 
</div> 

问题: 模板Url在ngView内部调用不支持任何AngularJS deirectivedata-ng-model="email" & data-ng-model="password"在ngView呼吁点击链接<a href="#/page1">Page 1</a>

任何帮助不工作时可以理解的。谢谢

+0

@MikkoViitala,能否请你帮我精心更多的评论。 –

+0

是的,发布Page1Ctrl的JS代码。 –

回答

1

没有看到代码,您Page1Ctrl这很难说,但它好像你正在尝试使用$rootScope控制器之间的数据共享,没有?

好吧,就是不要。使用$routeParams或为此目的的服务。例如:

// app controller 
.controller('AppCtrl', function(User) { 
    User.set({email:'email', password:'password'}); // set user 
}) 

// page 1 controller 
.controller('Page1Ctrl', function($scope, User) { 
    $scope.user = User.get(); // get user 
}) 

// user service  
.service('User', function() { 
    var user = null; 
    return { 
    get: function() { 
     return user; 
    }, 
    set: function(val) { 
     user = val; 
    } 
    }; 
}); 

和相关的HTML

<input type="text" 
     name="email" 
     data-ng-model="user.email" 
     required> 
<input type="password" 
     name="password" 
     data-ng-model="user.password" 
     required> 
+0

谢谢..我在找它.. :) –

0

当您点击<a href="#/page1">Page 1</a>时,它加载Page1Ctrlpage1.html。您确定您无法访问Page1Ctrl中的$scope.email$scope.password

它应该是可访问的,如果没有则尝试如下创建一个模型对象:

$scope.LoginProfile = { 
     email: '', 
     password: '' 
} 

,并在您page1.html使用LoginProfile对象这样LoginProfile.emailLoginProfile.password

PS:尽量插在HTML以便您可以查看值(例如LoginProfile: {{LoginProfile}}

+0

感谢您的回答,我会尝试以这种方式实现它..是否有任何需要在page1.html中调用'angularJS.min'脚本?因为它已经在主页(index.html)中调用 –

+0

No.在SPA上,只有入口点(index.html)包含库js(angular,bootstrap等)和css文件。其他htmls只是使用ajax调用注入''的模板或部分。所以你不需要在'page1.html'中包含'angular.min.js'(或任何其他的js)。 – vs4vijay

+0

好的..感谢这个.. :) –