Я пытаюсь использовать одну кнопку "создать", которая либо открывает диалог, либо переходит на новую страницу с использованием ui-router, в зависимости от значения объекта.
Я не уверен в лучшем способе этого добиться, у меня есть что-то, что работает, но мне интересно, есть ли лучший способ. В настоящее время я использую две кнопки и ng - если скрыть кнопку, которая мне не нужна в то время, но это кажется мне грязным.
Здесь очень простой пример того, что я пытаюсь сделать. Вместо того, чтобы открывать диалог или изменять содержимое страницы, я просто добавил предупреждения.
http://codepen.io/jwelker9/pen/QNPgyE?editors=1010
Короче говоря, я не уверен, как получить ui-sref и диалог, чтобы играть вместе на одной и той же кнопке.
HTML:
<div ng-controller = "lists-detail" ng-app="app">
<table class="listing">
<thead>
<tr>
<th>Item-Id:</th>
<th>Ordinal:</th>
<th>Type:</th>
<th>Content-Id:</th>
<th>
<button ng-if="!boolean"
class="button"
aria-label="Add list item"
ui-sref="site.lists">
Add New
</button>
<button ng-if="boolean"
class="button"
aria-label="Add list item"
ng-click="dialog()">
Add New
</button>
</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
JS:
var app = angular.module('app', []);
app.controller('lists-detail', function ($scope) {
//actual code looks like:
//This calls an API to determine if it is correct type or not
//If boolean is true, it should open a new dialog
//if(listType == 'Episode'){
$scope.boolean = false;
//}
$scope.goToNewPage = function() {
alert("NewPage");
}
$scope.dialog = function() {
alert("Open Dialog");
}
})
Если я правильно понимаю ваш вопрос, вы можете просто вызвать функцию, когда значение изменится и принять решение в функции следующим образом:
https://jsfiddle.net/tma739u9/
vm.boolean = false;
vm.watchBoolean = function() {
var decision = (!vm.boolean) ? newPage() : dialog();
}
function newPage() {
$location.path('/page');
}
function dialog() {
alert('Open dialog');
}
<input
type="checkbox"
ng-model="ctrl.boolean"
ng-click="ctrl.watchBoolean()"> Click Me
В своем ng-click
вы можете использовать выражение "Угловое выражение":
ng-click="boolean==true? dialog() : gotoNewPage()"
Это сокращенный способ сказать это в Javascript:
if (boolean) {
dialog();
} else {
gotoNewPage();
}